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