NeoMutt  2024-04-16-36-g75b6fb
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 <stddef.h>
34#include <stdbool.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, const char **parsed_until,
63 int did, int uid, ExpandoParserFlags flags,
64 struct ExpandoParseError *error)
65{
66 if (flags & EP_CONDITIONAL)
67 {
68 return node_conddate_parse(str + 1, parsed_until, did, uid, error);
69 }
70
71 return node_expando_parse_enclosure(str, parsed_until, did, uid, ']', error);
72}
73
80static const struct ExpandoDefinition PgpEntryFormatDef[] = {
81 // clang-format off
85 { "a", "key-algorithm", ED_PGP_KEY, ED_PGK_KEY_ALGORITHM, E_TYPE_STRING, NULL },
86 { "A", "pkey-algorithm", ED_PGP_KEY, ED_PGK_PKEY_ALGORITHM, E_TYPE_STRING, NULL },
87 { "c", "key-capabilities", ED_PGP_KEY, ED_PGK_KEY_CAPABILITIES, E_TYPE_STRING, NULL },
88 { "C", "pkey-capabilities", ED_PGP_KEY, ED_PGK_PKEY_CAPABILITIES, E_TYPE_STRING, NULL },
89 { "f", "key-flags", ED_PGP_KEY, ED_PGK_KEY_FLAGS, E_TYPE_STRING, NULL },
90 { "F", "pkey-flags", ED_PGP_KEY, ED_PGK_PKEY_FLAGS, E_TYPE_STRING, NULL },
91 { "i", "key-fingerprint", ED_PGP_KEY, ED_PGK_KEY_FINGERPRINT, E_TYPE_STRING, NULL },
92 { "I", "pkey-fingerprint", ED_PGP_KEY, ED_PGK_PKEY_FINGERPRINT, E_TYPE_STRING, NULL },
93 { "k", "key-id", ED_PGP_KEY, ED_PGK_KEY_ID, E_TYPE_STRING, NULL },
94 { "K", "pkey-id", ED_PGP_KEY, ED_PGK_PKEY_ID, E_TYPE_STRING, NULL },
95 { "l", "key-length", ED_PGP_KEY, ED_PGK_KEY_LENGTH, E_TYPE_NUMBER, NULL },
96 { "L", "pkey-length", ED_PGP_KEY, ED_PGK_PKEY_LENGTH, E_TYPE_NUMBER, NULL },
97 { "n", "number", ED_PGP, ED_PGP_NUMBER, E_TYPE_NUMBER, NULL },
98 { "p", "protocol", ED_PGP, ED_PGK_PROTOCOL, E_TYPE_STRING, NULL },
99 { "t", "trust", ED_PGP, ED_PGP_TRUST, E_TYPE_STRING, NULL },
100 { "u", "user-id", ED_PGP, ED_PGP_USER_ID, E_TYPE_STRING, NULL },
102 { NULL, NULL, 0, -1, -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_write", DT_BOOL, false, 0, NULL,
127 "Generate protected header (Memory Hole) for signed and encrypted emails"
128 },
129 { "crypt_timestamp", DT_BOOL, true, 0, NULL,
130 "Add a timestamp to PGP or SMIME output to prevent spoofing"
131 },
132 { "envelope_from_address", DT_ADDRESS, 0, 0, NULL,
133 "Manually set the sender for outgoing messages"
134 },
135 { "pgp_auto_inline", DT_BOOL, false, 0, NULL,
136 "Use old-style inline PGP messages (not recommended)"
137 },
138 { "pgp_default_key", DT_STRING, 0, 0, NULL,
139 "Default key to use for PGP operations"
140 },
141 { "pgp_entry_format", DT_EXPANDO|D_NOT_EMPTY, IP "%4n %t%f %4l/0x%k %-4a %2c %u", IP &PgpEntryFormatDef, NULL,
142 "printf-like format string for the PGP key selection menu"
143 },
144 { "pgp_ignore_subkeys", DT_BOOL, true, 0, NULL,
145 "Only use the principal PGP key"
146 },
147 { "pgp_long_ids", DT_BOOL, true, 0, NULL,
148 "Display long PGP key IDs to the user"
149 },
150 { "pgp_mime_auto", DT_QUAD, MUTT_ASKYES, 0, NULL,
151 "Prompt the user to use MIME if inline PGP fails"
152 },
153 { "pgp_retainable_sigs", DT_BOOL, false, 0, NULL,
154 "Create nested multipart/signed or encrypted messages"
155 },
156 { "pgp_self_encrypt", DT_BOOL, true, 0, NULL,
157 "Encrypted messages will also be encrypted to $pgp_default_key too"
158 },
159 { "pgp_show_unusable", DT_BOOL, true, 0, NULL,
160 "Show non-usable keys in the key selection"
161 },
162 { "pgp_sign_as", DT_STRING, 0, 0, NULL,
163 "Use this alternative key for signing messages"
164 },
165 { "pgp_sort_keys", DT_SORT|D_SORT_REVERSE, SORT_ADDRESS, IP SortKeyMethods, NULL,
166 "Sort order for PGP keys"
167 },
168 { "pgp_strict_enc", DT_BOOL, true, 0, NULL,
169 "Encode PGP signed messages with quoted-printable (don't unset)"
170 },
171 { "smime_default_key", DT_STRING, 0, 0, NULL,
172 "Default key for SMIME operations"
173 },
174 { "smime_encrypt_with", DT_STRING, IP "aes256", 0, NULL,
175 "Algorithm for encryption"
176 },
177 { "smime_self_encrypt", DT_BOOL, true, 0, NULL,
178 "Encrypted messages will also be encrypt to $smime_default_key too"
179 },
180 { "smime_sign_as", DT_STRING, 0, 0, NULL,
181 "Use this alternative key for signing messages"
182 },
183 { "smime_is_default", DT_BOOL, false, 0, NULL,
184 "Use SMIME rather than PGP by default"
185 },
186 { "pgp_auto_decode", DT_BOOL, false, 0, NULL,
187 "Automatically decrypt PGP messages"
188 },
189 { "crypt_verify_sig", DT_QUAD, MUTT_YES, 0, NULL,
190 "Verify PGP or SMIME signatures"
191 },
192 { "crypt_protected_headers_save", DT_BOOL, false, 0, NULL,
193 "Save the cleartext Subject with the headers"
194 },
195
196 { "crypt_confirmhook", DT_SYNONYM, IP "crypt_confirm_hook", IP "2021-02-11" },
197 { "pgp_autoinline", DT_SYNONYM, IP "pgp_auto_inline", IP "2021-02-11" },
198 { "pgp_create_traditional", DT_SYNONYM, IP "pgp_auto_inline", IP "2004-04-12" },
199 { "pgp_self_encrypt_as", DT_SYNONYM, IP "pgp_default_key", IP "2018-01-11" },
200 { "pgp_verify_sig", DT_SYNONYM, IP "crypt_verify_sig", IP "2002-01-24" },
201 { "smime_self_encrypt_as", DT_SYNONYM, IP "smime_default_key", IP "2018-01-11" },
202
203 { "pgp_encrypt_self", D_INTERNAL_DEPRECATED|DT_QUAD, 0, IP "2019-09-09" },
204 { "smime_encrypt_self", D_INTERNAL_DEPRECATED|DT_QUAD, 0, IP "2019-09-09" },
205
206 { NULL },
207 // clang-format on
208};
209
210#if defined(CRYPT_BACKEND_GPGME)
214static struct ConfigDef NcryptVarsGpgme[] = {
215 // clang-format off
216 { "crypt_use_gpgme", DT_BOOL|D_ON_STARTUP, true, 0, NULL,
217 "Use GPGME crypto backend"
218 },
219 { "crypt_use_pka", DT_BOOL, false, 0, NULL,
220 "Use GPGME to use PKA (lookup PGP keys using DNS)"
221 },
222 { NULL },
223 // clang-format on
224};
225#endif
226
227#if defined(CRYPT_BACKEND_CLASSIC_PGP)
246static const struct ExpandoDefinition PgpCommandFormatDef[] = {
247 // clang-format off
248 { "a", "sign-as", ED_PGP_CMD, ED_PGC_SIGN_AS, E_TYPE_STRING, NULL },
249 { "f", "file-message", ED_PGP_CMD, ED_PGC_FILE_MESSAGE, E_TYPE_STRING, NULL },
250 { "p", "need-pass", ED_PGP_CMD, ED_PGC_NEED_PASS, E_TYPE_NUMBER, NULL },
251 { "r", "key-ids", ED_PGP_CMD, ED_PGC_KEY_IDS, E_TYPE_STRING, NULL },
252 { "s", "file-signature", ED_PGP_CMD, ED_PGC_FILE_SIGNATURE, E_TYPE_STRING, NULL },
253 { NULL, NULL, 0, -1, -1, NULL }
254 // clang-format on
255};
256#endif
257
258#if defined(CRYPT_BACKEND_CLASSIC_SMIME)
275 // clang-format off
276 { "a", "algorithm", ED_SMIME_CMD, ED_SMI_ALGORITHM, E_TYPE_STRING, NULL },
277 { "c", "certificate-ids", ED_SMIME_CMD, ED_SMI_CERTIFICATE_IDS, E_TYPE_STRING, NULL },
278 { "C", "certificate-path", ED_GLOBAL, ED_GLO_CERTIFICATE_PATH, E_TYPE_STRING, NULL },
279 { "d", "digest-algorithm", ED_SMIME_CMD, ED_SMI_DIGEST_ALGORITHM, E_TYPE_STRING, NULL },
280 { "f", "message-file", ED_SMIME_CMD, ED_SMI_MESSAGE_FILE, E_TYPE_STRING, NULL },
281 { "i", "intermediate-ids", ED_SMIME_CMD, ED_SMI_INTERMEDIATE_IDS, E_TYPE_STRING, NULL },
282 { "k", "key", ED_SMIME_CMD, ED_SMI_KEY, E_TYPE_STRING, NULL },
283 { "s", "signature-file", ED_SMIME_CMD, ED_SMI_SIGNATURE_FILE, E_TYPE_STRING, NULL },
284 { NULL, NULL, 0, -1, -1, NULL }
285 // clang-format on
286};
287#endif
288
289#if defined(CRYPT_BACKEND_CLASSIC_PGP)
293static struct ConfigDef NcryptVarsPgp[] = {
294 // clang-format off
295 { "pgp_check_exit", DT_BOOL, true, 0, NULL,
296 "Check the exit code of PGP subprocess"
297 },
298 { "pgp_check_gpg_decrypt_status_fd", DT_BOOL, true, 0, NULL,
299 "File descriptor used for status info"
300 },
301 { "pgp_clear_sign_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &PgpCommandFormatDef, NULL,
302 "(pgp) External command to inline-sign a message"
303 },
304 { "pgp_decode_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &PgpCommandFormatDef, NULL,
305 "(pgp) External command to decode a PGP attachment"
306 },
307 { "pgp_decrypt_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &PgpCommandFormatDef, NULL,
308 "(pgp) External command to decrypt a PGP message"
309 },
310 { "pgp_decryption_okay", DT_REGEX, 0, 0, NULL,
311 "Text indicating a successful decryption"
312 },
313 { "pgp_encrypt_only_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &PgpCommandFormatDef, NULL,
314 "(pgp) External command to encrypt, but not sign a message"
315 },
316 { "pgp_encrypt_sign_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &PgpCommandFormatDef, NULL,
317 "(pgp) External command to encrypt and sign a message"
318 },
319 { "pgp_export_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &PgpCommandFormatDef, NULL,
320 "(pgp) External command to export a public key from the user's keyring"
321 },
322 { "pgp_get_keys_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &PgpCommandFormatDef, NULL,
323 "(pgp) External command to download a key for an email address"
324 },
325 { "pgp_good_sign", DT_REGEX, 0, 0, NULL,
326 "Text indicating a good signature"
327 },
328 { "pgp_import_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &PgpCommandFormatDef, NULL,
329 "(pgp) External command to import a key into the user's keyring"
330 },
331 { "pgp_list_pubring_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &PgpCommandFormatDef, NULL,
332 "(pgp) External command to list the public keys in a user's keyring"
333 },
334 { "pgp_list_secring_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &PgpCommandFormatDef, NULL,
335 "(pgp) External command to list the private keys in a user's keyring"
336 },
337 { "pgp_sign_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &PgpCommandFormatDef, NULL,
338 "(pgp) External command to create a detached PGP signature"
339 },
340 { "pgp_timeout", DT_LONG|D_INTEGER_NOT_NEGATIVE, 300, 0, NULL,
341 "Time in seconds to cache a passphrase"
342 },
343 { "pgp_use_gpg_agent", DT_BOOL, true, 0, NULL,
344 "Use a PGP agent for caching passwords"
345 },
346 { "pgp_verify_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &PgpCommandFormatDef, NULL,
347 "(pgp) External command to verify PGP signatures"
348 },
349 { "pgp_verify_key_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &PgpCommandFormatDef, NULL,
350 "(pgp) External command to verify key information"
351 },
352 { "pgp_clearsign_command", DT_SYNONYM, IP "pgp_clear_sign_command", IP "2021-02-11" },
353 { "pgp_getkeys_command", DT_SYNONYM, IP "pgp_get_keys_command", IP "2021-02-11" },
354 { NULL },
355 // clang-format on
356};
357#endif
358
359#if defined(CRYPT_BACKEND_CLASSIC_SMIME)
363static struct ConfigDef NcryptVarsSmime[] = {
364 // clang-format off
365 { "smime_ask_cert_label", DT_BOOL, true, 0, NULL,
366 "Prompt the user for a label for SMIME certificates"
367 },
368 { "smime_ca_location", DT_PATH|D_PATH_FILE, 0, 0, NULL,
369 "File containing trusted certificates"
370 },
371 { "smime_certificates", DT_PATH|D_PATH_DIR, 0, 0, NULL,
372 "File containing user's public certificates"
373 },
374 { "smime_decrypt_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &SmimeCommandFormatDef, NULL,
375 "(smime) External command to decrypt an SMIME message"
376 },
377 { "smime_decrypt_use_default_key", DT_BOOL, true, 0, NULL,
378 "Use the default key for decryption"
379 },
380 { "smime_encrypt_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &SmimeCommandFormatDef, NULL,
381 "(smime) External command to encrypt a message"
382 },
383 { "smime_get_cert_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &SmimeCommandFormatDef, NULL,
384 "(smime) External command to extract a certificate from a message"
385 },
386 { "smime_get_cert_email_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &SmimeCommandFormatDef, NULL,
387 "(smime) External command to get a certificate for an email"
388 },
389 { "smime_get_signer_cert_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &SmimeCommandFormatDef, NULL,
390 "(smime) External command to extract a certificate from an email"
391 },
392 { "smime_import_cert_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &SmimeCommandFormatDef, NULL,
393 "(smime) External command to import a certificate"
394 },
395 { "smime_keys", DT_PATH|D_PATH_DIR, 0, 0, NULL,
396 "File containing user's private certificates"
397 },
398 { "smime_pk7out_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &SmimeCommandFormatDef, NULL,
399 "(smime) External command to extract a public certificate"
400 },
401 { "smime_sign_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &SmimeCommandFormatDef, NULL,
402 "(smime) External command to sign a message"
403 },
404 { "smime_sign_digest_alg", DT_STRING, IP "sha256", 0, NULL,
405 "Digest algorithm"
406 },
407 { "smime_timeout", DT_NUMBER|D_INTEGER_NOT_NEGATIVE, 300, 0, NULL,
408 "Time in seconds to cache a passphrase"
409 },
410 { "smime_verify_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &SmimeCommandFormatDef, NULL,
411 "(smime) External command to verify a signed message"
412 },
413 { "smime_verify_opaque_command", DT_EXPANDO|D_STRING_COMMAND, 0, IP &SmimeCommandFormatDef, NULL,
414 "(smime) External command to verify a signature"
415 },
416 { NULL },
417 // clang-format on
418};
419#endif
420
425{
426 bool rc = cs_register_variables(cs, NcryptVars);
427
428#if defined(CRYPT_BACKEND_GPGME)
430#endif
431
432#if defined(CRYPT_BACKEND_CLASSIC_PGP)
434#endif
435
436#if defined(CRYPT_BACKEND_CLASSIC_SMIME)
438#endif
439
440 return rc;
441}
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
@ E_TYPE_STRING
Data is a string.
Definition: definition.h:37
@ E_TYPE_NUMBER
Data is numeric.
Definition: definition.h:38
uint8_t ExpandoParserFlags
Flags for expando_parse(), e.g. EP_CONDITIONAL.
Definition: definition.h:41
#define EP_CONDITIONAL
Expando is being used as a condition.
Definition: definition.h:43
@ ED_PGP_CMD
Pgp Command ED_PGC_ ExpandoDataPgpCmd.
Definition: domain.h:53
@ ED_SMIME_CMD
Smime Command ED_SMI_ ExpandoDataSmimeCmd.
Definition: domain.h:56
@ ED_PGP
Pgp ED_PGP_ ExpandoDataPgp.
Definition: domain.h:52
@ ED_GLOBAL
Global ED_GLO_ ExpandoDataGlobal.
Definition: domain.h:44
@ ED_PGP_KEY
Pgp_Key ED_PGK_ ExpandoDataPgpKey.
Definition: domain.h:54
Parse Expando string.
bool config_init_ncrypt(struct ConfigSet *cs)
Register ncrypt config variables - Implements module_init_config_t -.
Definition: config.c:424
struct ExpandoNode * node_padding_parse(const char *str, const char **parsed_until, int did, int uid, ExpandoParserFlags flags, struct ExpandoParseError *error)
Parse a Padding Expando - Implements ExpandoDefinition::parse() -.
Definition: node_padding.c:232
struct ExpandoNode * node_conddate_parse(const char *str, const char **parsed_until, int did, int uid, struct ExpandoParseError *error)
Parse a CondDate format string - Implements ExpandoDefinition::parse() -.
struct ExpandoNode * parse_pgp_date(const char *str, const char **parsed_until, int did, int uid, ExpandoParserFlags flags, struct ExpandoParseError *error)
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:274
static struct ConfigDef NcryptVarsPgp[]
PGP Config definitions for the encryption library.
Definition: config.c:293
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:363
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:246
static struct ConfigDef NcryptVarsGpgme[]
GPGME Config definitions for the encryption library.
Definition: config.c:214
@ 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_expando_parse_enclosure(const char *str, const char **parsed_until, int did, int uid, char terminator, struct ExpandoParseError *error)
Parse an enclosed Expando.
Definition: node_expando.c:291
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:69
@ ED_PGK_KEY_FINGERPRINT
PgpKeyInfo.fingerprint.
Definition: pgplib.h:70
@ ED_PGK_PKEY_LENGTH
pgp_principal_key(), PgpKeyInfo.keylen
Definition: pgplib.h:79
@ ED_PGK_PKEY_ALGORITHM
pgp_principal_key(), PgpKeyInfo.algorithm
Definition: pgplib.h:74
@ ED_PGK_DATE
PgpKeyInfo.gen_time.
Definition: pgplib.h:67
@ ED_PGK_PKEY_FINGERPRINT
pgp_principal_key(), PgpKeyInfo.fingerprint
Definition: pgplib.h:76
@ ED_PGK_KEY_ID
PgpKeyInfo, pgp_this_keyid()
Definition: pgplib.h:72
@ ED_PGK_PROTOCOL
PgpKeyInfo.
Definition: pgplib.h:80
@ ED_PGK_PKEY_CAPABILITIES
pgp_principal_key(), PgpKeyInfo.flags, pgp_key_abilities()
Definition: pgplib.h:75
@ ED_PGK_KEY_FLAGS
PgpKeyInfo.kflags, pgp_flags()
Definition: pgplib.h:71
@ ED_PGK_PKEY_ID
pgp_principal_key(), PgpKeyInfo, pgp_this_keyid()
Definition: pgplib.h:78
@ ED_PGK_KEY_ALGORITHM
PgpKeyInfo.algorithm.
Definition: pgplib.h:68
@ ED_PGK_KEY_LENGTH
PgpKeyInfo.keylen.
Definition: pgplib.h:73
@ ED_PGK_PKEY_FLAGS
pgp_principal_key(), PgpKeyInfo.kflags, pgp_flags()
Definition: pgplib.h:77
@ 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:79
@ ED_SMI_ALGORITHM
SmimeCommandContext.cryptalg.
Definition: smime.h:74
@ ED_SMI_SIGNATURE_FILE
SmimeCommandContext.sig_fname.
Definition: smime.h:80
@ ED_SMI_DIGEST_ALGORITHM
SmimeCommandContext.digestalg.
Definition: smime.h:76
@ ED_SMI_CERTIFICATE_IDS
SmimeCommandContext.certificates.
Definition: smime.h:75
@ ED_SMI_KEY
SmimeCommandContext.key.
Definition: smime.h:78
@ ED_SMI_INTERMEDIATE_IDS
SmimeCommandContext.intermediates.
Definition: smime.h:77
@ 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:52
Basic Expando Node.
Definition: node.h:67
int uid
Unique ID, e.g. ED_EMA_SIZE.
Definition: node.h:71
int did
Domain ID, e.g. ED_EMAIL.
Definition: node.h:70
Buffer for parsing errors.
Definition: parse.h:34
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