NeoMutt  2024-11-14-34-g5aaf0d
Teaching an old dog new tricks
DOXYGEN
Loading...
Searching...
No Matches
config.c
Go to the documentation of this file.
1
32#include "config.h"
33#include <stdbool.h>
34#include <stddef.h>
35#include "private.h"
36#include "mutt/lib.h"
37#include "config/lib.h"
38#include "expando/lib.h"
39#include "pgp.h"
40#include "pgplib.h"
41#include "smime.h"
42
46static const struct Mapping SortKeyMethods[] = {
47 // clang-format off
48 { "address", SORT_ADDRESS },
49 { "date", SORT_DATE },
50 { "keyid", SORT_KEYID },
51 { "trust", SORT_TRUST },
52 { NULL, 0 },
53 // clang-format on
54};
55
62struct ExpandoNode *parse_pgp_date(const char *str, struct ExpandoFormat *fmt,
63 int did, int uid, ExpandoParserFlags flags,
64 const char **parsed_until, struct ExpandoParseError *err)
65{
66 if (flags & EP_CONDITIONAL)
67 {
68 return node_conddate_parse(str, did, uid, parsed_until, err);
69 }
70
71 return node_expando_parse_enclosure(str, did, uid, ']', fmt, parsed_until, err);
72}
73
80static const struct ExpandoDefinition PgpEntryFormatDef[] = {
81 // clang-format off
82 { "*", "padding-soft", ED_GLOBAL, ED_GLO_PADDING_SOFT, node_padding_parse },
83 { ">", "padding-hard", ED_GLOBAL, ED_GLO_PADDING_HARD, node_padding_parse },
84 { "|", "padding-eol", ED_GLOBAL, ED_GLO_PADDING_EOL, node_padding_parse },
85 { "a", "key-algorithm", ED_PGP_KEY, ED_PGK_KEY_ALGORITHM, NULL },
86 { "A", "pkey-algorithm", ED_PGP_KEY, ED_PGK_PKEY_ALGORITHM, NULL },
87 { "c", "key-capabilities", ED_PGP_KEY, ED_PGK_KEY_CAPABILITIES, NULL },
88 { "C", "pkey-capabilities", ED_PGP_KEY, ED_PGK_PKEY_CAPABILITIES, NULL },
89 { "f", "key-flags", ED_PGP_KEY, ED_PGK_KEY_FLAGS, NULL },
90 { "F", "pkey-flags", ED_PGP_KEY, ED_PGK_PKEY_FLAGS, NULL },
91 { "i", "key-fingerprint", ED_PGP_KEY, ED_PGK_KEY_FINGERPRINT, NULL },
92 { "I", "pkey-fingerprint", ED_PGP_KEY, ED_PGK_PKEY_FINGERPRINT, NULL },
93 { "k", "key-id", ED_PGP_KEY, ED_PGK_KEY_ID, NULL },
94 { "K", "pkey-id", ED_PGP_KEY, ED_PGK_PKEY_ID, NULL },
95 { "l", "key-length", ED_PGP_KEY, ED_PGK_KEY_LENGTH, NULL },
96 { "L", "pkey-length", ED_PGP_KEY, ED_PGK_PKEY_LENGTH, NULL },
97 { "n", "number", ED_PGP, ED_PGP_NUMBER, NULL },
98 { "p", "protocol", ED_PGP, ED_PGK_PROTOCOL, NULL },
99 { "t", "trust", ED_PGP, ED_PGP_TRUST, NULL },
100 { "u", "user-id", ED_PGP, ED_PGP_USER_ID, NULL },
101 { "[", "date", ED_PGP_KEY, ED_PGK_DATE, parse_pgp_date },
102 { NULL, NULL, 0, -1, NULL }
103 // clang-format on
104};
105
109static struct ConfigDef NcryptVars[] = {
110 // clang-format off
111 { "crypt_confirm_hook", DT_BOOL, true, 0, NULL,
112 "Prompt the user to confirm keys before use"
113 },
114 { "crypt_opportunistic_encrypt", DT_BOOL, false, 0, NULL,
115 "Enable encryption when the recipient's key is available"
116 },
117 { "crypt_opportunistic_encrypt_strong_keys", DT_BOOL, false, 0, NULL,
118 "Enable encryption only when strong a key is available"
119 },
120 { "crypt_protected_headers_read", DT_BOOL, true, 0, NULL,
121 "Display protected headers (Memory Hole) in the pager"
122 },
123 { "crypt_protected_headers_subject", DT_STRING, IP "...", 0, NULL,
124 "Use this as the subject for encrypted emails"
125 },
126 { "crypt_protected_headers_weed", DT_BOOL, false, 0, NULL,
127 "Controls whether NeoMutt will weed protected header fields"
128 },
129 { "crypt_protected_headers_write", DT_BOOL, true, 0, NULL,
130 "Generate protected header (Memory Hole) for signed and encrypted emails"
131 },
132 { "crypt_encryption_info", DT_BOOL, true, 0, NULL,
133 "Add an informative block with details about the encryption"
134 },
135 { "crypt_timestamp", DT_BOOL, true, 0, NULL,
136 "Add a timestamp to PGP or SMIME output to prevent spoofing"
137 },
138 { "envelope_from_address", DT_ADDRESS, 0, 0, NULL,
139 "Manually set the sender for outgoing messages"
140 },
141 { "pgp_auto_inline", DT_BOOL, false, 0, NULL,
142 "Use old-style inline PGP messages (not recommended)"
143 },
144 { "pgp_default_key", DT_STRING, 0, 0, NULL,
145 "Default key to use for PGP operations"
146 },
147 { "pgp_entry_format", DT_EXPANDO|D_NOT_EMPTY, IP "%4n %t%f %4l/0x%k %-4a %2c %u", IP &PgpEntryFormatDef, NULL,
148 "printf-like format string for the PGP key selection menu"
149 },
150 { "pgp_ignore_subkeys", DT_BOOL, true, 0, NULL,
151 "Only use the principal PGP key"
152 },
153 { "pgp_long_ids", DT_BOOL, true, 0, NULL,
154 "Display long PGP key IDs to the user"
155 },
156 { "pgp_mime_auto", DT_QUAD, MUTT_ASKYES, 0, NULL,
157 "Prompt the user to use MIME if inline PGP fails"
158 },
159 { "pgp_retainable_sigs", DT_BOOL, false, 0, NULL,
160 "Create nested multipart/signed or encrypted messages"
161 },
162 { "pgp_self_encrypt", DT_BOOL, true, 0, NULL,
163 "Encrypted messages will also be encrypted to $pgp_default_key too"
164 },
165 { "pgp_show_unusable", DT_BOOL, true, 0, NULL,
166 "Show non-usable keys in the key selection"
167 },
168 { "pgp_sign_as", DT_STRING, 0, 0, NULL,
169 "Use this alternative key for signing messages"
170 },
171 { "pgp_sort_keys", DT_SORT|D_SORT_REVERSE, SORT_ADDRESS, IP SortKeyMethods, NULL,
172 "Sort order for PGP keys"
173 },
174 { "pgp_strict_enc", DT_BOOL, true, 0, NULL,
175 "Encode PGP signed messages with quoted-printable (don't unset)"
176 },
177 { "smime_default_key", DT_STRING, 0, 0, NULL,
178 "Default key for SMIME operations"
179 },
180 { "smime_encrypt_with", DT_STRING, IP "aes256", 0, NULL,
181 "Algorithm for encryption"
182 },
183 { "smime_self_encrypt", DT_BOOL, true, 0, NULL,
184 "Encrypted messages will also be encrypt to $smime_default_key too"
185 },
186 { "smime_sign_as", DT_STRING, 0, 0, NULL,
187 "Use this alternative key for signing messages"
188 },
189 { "smime_is_default", DT_BOOL, false, 0, NULL,
190 "Use SMIME rather than PGP by default"
191 },
192 { "pgp_auto_decode", DT_BOOL, false, 0, NULL,
193 "Automatically decrypt PGP messages"
194 },
195 { "crypt_verify_sig", DT_QUAD, MUTT_YES, 0, NULL,
196 "Verify PGP or SMIME signatures"
197 },
198 { "crypt_protected_headers_save", DT_BOOL, false, 0, NULL,
199 "Save the cleartext Subject with the headers"
200 },
201
202 { "crypt_confirmhook", DT_SYNONYM, IP "crypt_confirm_hook", IP "2021-02-11" },
203 { "pgp_autoinline", DT_SYNONYM, IP "pgp_auto_inline", IP "2021-02-11" },
204 { "pgp_create_traditional", DT_SYNONYM, IP "pgp_auto_inline", IP "2004-04-12" },
205 { "pgp_self_encrypt_as", DT_SYNONYM, IP "pgp_default_key", IP "2018-01-11" },
206 { "pgp_verify_sig", DT_SYNONYM, IP "crypt_verify_sig", IP "2002-01-24" },
207 { "smime_self_encrypt_as", DT_SYNONYM, IP "smime_default_key", IP "2018-01-11" },
208
209 { "pgp_encrypt_self", D_INTERNAL_DEPRECATED|DT_QUAD, 0, IP "2019-09-09" },
210 { "smime_encrypt_self", D_INTERNAL_DEPRECATED|DT_QUAD, 0, IP "2019-09-09" },
211
212 { NULL },
213 // clang-format on
214};
215
216#if defined(CRYPT_BACKEND_GPGME)
220static struct ConfigDef NcryptVarsGpgme[] = {
221 // clang-format off
222 { "crypt_use_gpgme", DT_BOOL|D_ON_STARTUP, true, 0, NULL,
223 "Use GPGME crypto backend"
224 },
225 { "crypt_use_pka", DT_BOOL, false, 0, NULL,
226 "Use GPGME to use PKA (lookup PGP keys using DNS)"
227 },
228 { NULL },
229 // clang-format on
230};
231#endif
232
233#if defined(CRYPT_BACKEND_CLASSIC_PGP)
252static const struct ExpandoDefinition PgpCommandFormatDef[] = {
253 // clang-format off
254 { "a", "sign-as", ED_PGP_CMD, ED_PGC_SIGN_AS, NULL },
255 { "f", "file-message", ED_PGP_CMD, ED_PGC_FILE_MESSAGE, NULL },
256 { "p", "need-pass", ED_PGP_CMD, ED_PGC_NEED_PASS, NULL },
257 { "r", "key-ids", ED_PGP_CMD, ED_PGC_KEY_IDS, NULL },
258 { "s", "file-signature", ED_PGP_CMD, ED_PGC_FILE_SIGNATURE, NULL },
259 { NULL, NULL, 0, -1, NULL }
260 // clang-format on
261};
262#endif
263
264#if defined(CRYPT_BACKEND_CLASSIC_SMIME)
281 // clang-format off
282 { "a", "algorithm", ED_SMIME_CMD, ED_SMI_ALGORITHM, NULL },
283 { "c", "certificate-ids", ED_SMIME_CMD, ED_SMI_CERTIFICATE_IDS, NULL },
284 { "C", "certificate-path", ED_GLOBAL, ED_GLO_CERTIFICATE_PATH, NULL },
285 { "d", "digest-algorithm", ED_SMIME_CMD, ED_SMI_DIGEST_ALGORITHM, NULL },
286 { "f", "message-file", ED_SMIME_CMD, ED_SMI_MESSAGE_FILE, NULL },
287 { "i", "intermediate-ids", ED_SMIME_CMD, ED_SMI_INTERMEDIATE_IDS, NULL },
288 { "k", "key", ED_SMIME_CMD, ED_SMI_KEY, NULL },
289 { "s", "signature-file", ED_SMIME_CMD, ED_SMI_SIGNATURE_FILE, NULL },
290 { NULL, NULL, 0, -1, NULL }
291 // clang-format on
292};
293#endif
294
295#if defined(CRYPT_BACKEND_CLASSIC_PGP)
299static struct ConfigDef NcryptVarsPgp[] = {
300 // clang-format off
301 { "pgp_check_exit", DT_BOOL, true, 0, NULL,
302 "Check the exit code of PGP subprocess"
303 },
304 { "pgp_check_gpg_decrypt_status_fd", DT_BOOL, true, 0, NULL,
305 "File descriptor used for status info"
306 },
307 { "pgp_clear_sign_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &PgpCommandFormatDef, NULL,
308 "(pgp) External command to inline-sign a message"
309 },
310 { "pgp_decode_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &PgpCommandFormatDef, NULL,
311 "(pgp) External command to decode a PGP attachment"
312 },
313 { "pgp_decrypt_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &PgpCommandFormatDef, NULL,
314 "(pgp) External command to decrypt a PGP message"
315 },
316 { "pgp_decryption_okay", DT_REGEX, 0, 0, NULL,
317 "Text indicating a successful decryption"
318 },
319 { "pgp_encrypt_only_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &PgpCommandFormatDef, NULL,
320 "(pgp) External command to encrypt, but not sign a message"
321 },
322 { "pgp_encrypt_sign_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &PgpCommandFormatDef, NULL,
323 "(pgp) External command to encrypt and sign a message"
324 },
325 { "pgp_export_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &PgpCommandFormatDef, NULL,
326 "(pgp) External command to export a public key from the user's keyring"
327 },
328 { "pgp_get_keys_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &PgpCommandFormatDef, NULL,
329 "(pgp) External command to download a key for an email address"
330 },
331 { "pgp_good_sign", DT_REGEX, 0, 0, NULL,
332 "Text indicating a good signature"
333 },
334 { "pgp_import_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &PgpCommandFormatDef, NULL,
335 "(pgp) External command to import a key into the user's keyring"
336 },
337 { "pgp_list_pubring_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &PgpCommandFormatDef, NULL,
338 "(pgp) External command to list the public keys in a user's keyring"
339 },
340 { "pgp_list_secring_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &PgpCommandFormatDef, NULL,
341 "(pgp) External command to list the private keys in a user's keyring"
342 },
343 { "pgp_sign_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &PgpCommandFormatDef, NULL,
344 "(pgp) External command to create a detached PGP signature"
345 },
346 { "pgp_timeout", DT_LONG|D_INTEGER_NOT_NEGATIVE, 300, 0, NULL,
347 "Time in seconds to cache a passphrase"
348 },
349 { "pgp_use_gpg_agent", DT_BOOL, true, 0, NULL,
350 "Use a PGP agent for caching passwords"
351 },
352 { "pgp_verify_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &PgpCommandFormatDef, NULL,
353 "(pgp) External command to verify PGP signatures"
354 },
355 { "pgp_verify_key_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &PgpCommandFormatDef, NULL,
356 "(pgp) External command to verify key information"
357 },
358 { "pgp_clearsign_command", DT_SYNONYM, IP "pgp_clear_sign_command", IP "2021-02-11" },
359 { "pgp_getkeys_command", DT_SYNONYM, IP "pgp_get_keys_command", IP "2021-02-11" },
360 { NULL },
361 // clang-format on
362};
363#endif
364
365#if defined(CRYPT_BACKEND_CLASSIC_SMIME)
369static struct ConfigDef NcryptVarsSmime[] = {
370 // clang-format off
371 { "smime_ask_cert_label", DT_BOOL, true, 0, NULL,
372 "Prompt the user for a label for SMIME certificates"
373 },
374 { "smime_ca_location", DT_PATH|D_PATH_FILE, 0, 0, NULL,
375 "File containing trusted certificates"
376 },
377 { "smime_certificates", DT_PATH|D_PATH_DIR, 0, 0, NULL,
378 "File containing user's public certificates"
379 },
380 { "smime_decrypt_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &SmimeCommandFormatDef, NULL,
381 "(smime) External command to decrypt an SMIME message"
382 },
383 { "smime_decrypt_use_default_key", DT_BOOL, true, 0, NULL,
384 "Use the default key for decryption"
385 },
386 { "smime_encrypt_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &SmimeCommandFormatDef, NULL,
387 "(smime) External command to encrypt a message"
388 },
389 { "smime_get_cert_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &SmimeCommandFormatDef, NULL,
390 "(smime) External command to extract a certificate from a message"
391 },
392 { "smime_get_cert_email_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &SmimeCommandFormatDef, NULL,
393 "(smime) External command to get a certificate for an email"
394 },
395 { "smime_get_signer_cert_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &SmimeCommandFormatDef, NULL,
396 "(smime) External command to extract a certificate from an email"
397 },
398 { "smime_import_cert_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &SmimeCommandFormatDef, NULL,
399 "(smime) External command to import a certificate"
400 },
401 { "smime_keys", DT_PATH|D_PATH_DIR, 0, 0, NULL,
402 "File containing user's private certificates"
403 },
404 { "smime_pk7out_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &SmimeCommandFormatDef, NULL,
405 "(smime) External command to extract a public certificate"
406 },
407 { "smime_sign_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &SmimeCommandFormatDef, NULL,
408 "(smime) External command to sign a message"
409 },
410 { "smime_sign_digest_alg", DT_STRING, IP "sha256", 0, NULL,
411 "Digest algorithm"
412 },
413 { "smime_timeout", DT_NUMBER|D_INTEGER_NOT_NEGATIVE, 300, 0, NULL,
414 "Time in seconds to cache a passphrase"
415 },
416 { "smime_verify_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &SmimeCommandFormatDef, NULL,
417 "(smime) External command to verify a signed message"
418 },
419 { "smime_verify_opaque_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &SmimeCommandFormatDef, NULL,
420 "(smime) External command to verify a signature"
421 },
422 { NULL },
423 // clang-format on
424};
425#endif
426
431{
432 bool rc = cs_register_variables(cs, NcryptVars);
433
434#if defined(CRYPT_BACKEND_GPGME)
436#endif
437
438#if defined(CRYPT_BACKEND_CLASSIC_PGP)
440#endif
441
442#if defined(CRYPT_BACKEND_CLASSIC_SMIME)
444#endif
445
446 return rc;
447}
Convenience wrapper for the config headers.
bool cs_register_variables(const struct ConfigSet *cs, struct ConfigDef vars[])
Register a set of config items.
Definition: set.c:281
#define IP
Definition: set.h:54
uint8_t ExpandoParserFlags
Flags for expando_parse(), e.g. EP_CONDITIONAL.
Definition: definition.h:33
#define EP_CONDITIONAL
Expando is being used as a condition.
Definition: definition.h:35
@ ED_PGP_CMD
Pgp Command ED_PGC_ ExpandoDataPgpCmd.
Definition: domain.h:52
@ ED_SMIME_CMD
Smime Command ED_SMI_ ExpandoDataSmimeCmd.
Definition: domain.h:55
@ ED_PGP
Pgp ED_PGP_ ExpandoDataPgp.
Definition: domain.h:51
@ ED_GLOBAL
Global ED_GLO_ ExpandoDataGlobal.
Definition: domain.h:44
@ ED_PGP_KEY
Pgp_Key ED_PGK_ ExpandoDataPgpKey.
Definition: domain.h:53
Parse Expando string.
bool config_init_ncrypt(struct ConfigSet *cs)
Register ncrypt config variables - Implements module_init_config_t -.
Definition: config.c:430
struct ExpandoNode * node_padding_parse(const char *str, struct ExpandoFormat *fmt, int did, int uid, ExpandoParserFlags flags, const char **parsed_until, struct ExpandoParseError *err)
Parse a Padding Expando - Implements ExpandoDefinition::parse() -.
Definition: node_padding.c:234
struct ExpandoNode * parse_pgp_date(const char *str, struct ExpandoFormat *fmt, int did, int uid, ExpandoParserFlags flags, const char **parsed_until, struct ExpandoParseError *err)
Parse a Date Expando - Implements ExpandoDefinition::parse() -.
Definition: config.c:62
Convenience wrapper for the library headers.
static const struct ExpandoDefinition SmimeCommandFormatDef[]
Expando definitions.
Definition: config.c:280
static struct ConfigDef NcryptVarsPgp[]
PGP Config definitions for the encryption library.
Definition: config.c:299
static const struct ExpandoDefinition PgpEntryFormatDef[]
Expando definitions.
Definition: config.c:80
static struct ConfigDef NcryptVarsSmime[]
SMIME Config definitions for the encryption library.
Definition: config.c:369
static const struct Mapping SortKeyMethods[]
Sort methods for encryption keys.
Definition: config.c:46
static struct ConfigDef NcryptVars[]
Config definitions for the encryption library.
Definition: config.c:109
static const struct ExpandoDefinition PgpCommandFormatDef[]
Expando definitions.
Definition: config.c:252
static struct ConfigDef NcryptVarsGpgme[]
GPGME Config definitions for the encryption library.
Definition: config.c:220
@ ED_PGP_NUMBER
PgpEntry.num.
Definition: private.h:51
@ ED_PGP_USER_ID
PgpUid.addr.
Definition: private.h:53
@ ED_PGP_TRUST
PgpUid, TrustFlags.
Definition: private.h:52
struct ExpandoNode * node_conddate_parse(const char *str, int did, int uid, const char **parsed_until, struct ExpandoParseError *err)
Parse a CondDate format string.
struct ExpandoNode * node_expando_parse_enclosure(const char *str, int did, int uid, char terminator, struct ExpandoFormat *fmt, const char **parsed_until, struct ExpandoParseError *err)
Parse an enclosed Expando.
Definition: node_expando.c:349
PGP sign, encrypt, check routines.
@ ED_PGC_KEY_IDS
PgpCommandContext.ids.
Definition: pgp.h:60
@ ED_PGC_FILE_SIGNATURE
PgpCommandContext.sig_fname.
Definition: pgp.h:59
@ ED_PGC_NEED_PASS
PgpCommandContext.need_passphrase.
Definition: pgp.h:61
@ ED_PGC_SIGN_AS
PgpCommandContext.signas.
Definition: pgp.h:62
@ ED_PGC_FILE_MESSAGE
PgpCommandContext.fname.
Definition: pgp.h:58
Misc PGP helper routines.
@ ED_PGK_KEY_CAPABILITIES
PgpKeyInfo.flags, pgp_key_abilities()
Definition: pgplib.h:70
@ ED_PGK_KEY_FINGERPRINT
PgpKeyInfo.fingerprint.
Definition: pgplib.h:71
@ ED_PGK_PKEY_LENGTH
pgp_principal_key(), PgpKeyInfo.keylen
Definition: pgplib.h:80
@ ED_PGK_PKEY_ALGORITHM
pgp_principal_key(), PgpKeyInfo.algorithm
Definition: pgplib.h:75
@ ED_PGK_DATE
PgpKeyInfo.gen_time.
Definition: pgplib.h:68
@ ED_PGK_PKEY_FINGERPRINT
pgp_principal_key(), PgpKeyInfo.fingerprint
Definition: pgplib.h:77
@ ED_PGK_KEY_ID
PgpKeyInfo, pgp_this_keyid()
Definition: pgplib.h:73
@ ED_PGK_PROTOCOL
PgpKeyInfo.
Definition: pgplib.h:81
@ ED_PGK_PKEY_CAPABILITIES
pgp_principal_key(), PgpKeyInfo.flags, pgp_key_abilities()
Definition: pgplib.h:76
@ ED_PGK_KEY_FLAGS
PgpKeyInfo.kflags, pgp_flags()
Definition: pgplib.h:72
@ ED_PGK_PKEY_ID
pgp_principal_key(), PgpKeyInfo, pgp_this_keyid()
Definition: pgplib.h:79
@ ED_PGK_KEY_ALGORITHM
PgpKeyInfo.algorithm.
Definition: pgplib.h:69
@ ED_PGK_KEY_LENGTH
PgpKeyInfo.keylen.
Definition: pgplib.h:74
@ ED_PGK_PKEY_FLAGS
pgp_principal_key(), PgpKeyInfo.kflags, pgp_flags()
Definition: pgplib.h:78
@ MUTT_ASKYES
Ask the user, defaulting to 'Yes'.
Definition: quad.h:41
@ MUTT_YES
User answered 'Yes', or assume 'Yes'.
Definition: quad.h:39
GUI display the mailboxes in a side panel.
SMIME helper routines.
@ ED_SMI_MESSAGE_FILE
SmimeCommandContext.fname.
Definition: smime.h:81
@ ED_SMI_ALGORITHM
SmimeCommandContext.cryptalg.
Definition: smime.h:76
@ ED_SMI_SIGNATURE_FILE
SmimeCommandContext.sig_fname.
Definition: smime.h:82
@ ED_SMI_DIGEST_ALGORITHM
SmimeCommandContext.digestalg.
Definition: smime.h:78
@ ED_SMI_CERTIFICATE_IDS
SmimeCommandContext.certificates.
Definition: smime.h:77
@ ED_SMI_KEY
SmimeCommandContext.key.
Definition: smime.h:80
@ ED_SMI_INTERMEDIATE_IDS
SmimeCommandContext.intermediates.
Definition: smime.h:79
@ SORT_TRUST
Sort by encryption key's trust level.
Definition: sort2.h:48
@ SORT_KEYID
Sort by the encryption key's ID.
Definition: sort2.h:47
@ SORT_DATE
Sort by the date the email was sent.
Definition: sort2.h:35
@ SORT_ADDRESS
Sort by email address.
Definition: sort2.h:46
Definition: set.h:64
Container for lots of config items.
Definition: set.h:252
Definition of a format string.
Definition: definition.h:44
Formatting information for an Expando.
Definition: node.h:53
Basic Expando Node.
Definition: node.h:67
int uid
Unique ID, e.g. ED_EMA_SIZE.
Definition: node.h:70
int did
Domain ID, e.g. ED_EMAIL.
Definition: node.h:69
Buffer for parsing errors.
Definition: parse.h:37
Mapping between user-readable string and a constant.
Definition: mapping.h:33
#define D_INTERNAL_DEPRECATED
Config item shouldn't be used any more.
Definition: types.h:88
#define D_STRING_COMMAND
A command.
Definition: types.h:99
#define D_PATH_DIR
Path is a directory.
Definition: types.h:103
#define D_PATH_FILE
Path is a file.
Definition: types.h:104
@ DT_NUMBER
a number
Definition: types.h:39
@ DT_BOOL
boolean option
Definition: types.h:32
@ DT_QUAD
quad-option (no/yes/ask-no/ask-yes)
Definition: types.h:41
@ DT_SYNONYM
synonym for another variable
Definition: types.h:46
@ DT_STRING
a string
Definition: types.h:45
@ DT_SORT
sorting methods
Definition: types.h:44
@ DT_ADDRESS
e-mail address
Definition: types.h:31
@ DT_LONG
a number (long)
Definition: types.h:36
@ DT_EXPANDO
an expando
Definition: types.h:34
@ DT_REGEX
regular expressions
Definition: types.h:42
@ DT_PATH
a path to a file/directory
Definition: types.h:40
#define D_SORT_REVERSE
Sort flag for -reverse prefix.
Definition: types.h:120
#define D_NOT_EMPTY
Empty strings are not allowed.
Definition: types.h:80
#define D_INTEGER_NOT_NEGATIVE
Negative numbers are not allowed.
Definition: types.h:101
#define D_ON_STARTUP
May only be set at startup.
Definition: types.h:79
@ ED_GLO_PADDING_EOL
Padding to end-of-line.
Definition: uid.h:36
@ ED_GLO_CERTIFICATE_PATH
Path of Smime certificates.
Definition: uid.h:34
@ ED_GLO_PADDING_HARD
Hard Padding.
Definition: uid.h:37
@ ED_GLO_PADDING_SOFT
Soft Padding.
Definition: uid.h:38