NeoMutt  2025-01-09-117-gace867
Teaching an old dog new tricks
DOXYGEN
Loading...
Searching...
No Matches
config.c
Go to the documentation of this file.
1
31#include "config.h"
32#include <stdbool.h>
33#include <stddef.h>
34#include <stdint.h>
35#include "private.h"
36#include "mutt/lib.h"
37#include "config/lib.h"
38#ifdef USE_SASL_CYRUS
39#include "conn/lib.h"
40#endif
41
45static int pop_auth_validator(const struct ConfigDef *cdef, intptr_t value, struct Buffer *err)
46{
47 const struct Slist *pop_auth_methods = (const struct Slist *) value;
48 if (!pop_auth_methods || (pop_auth_methods->count == 0))
49 return CSR_SUCCESS;
50
51 struct ListNode *np = NULL;
52 STAILQ_FOREACH(np, &pop_auth_methods->head, entries)
53 {
54 if (pop_auth_is_valid(np->data))
55 continue;
56#ifdef USE_SASL_CYRUS
58 continue;
59#endif
60 buf_printf(err, _("Option %s: %s is not a valid authenticator"), cdef->name, np->data);
61 return CSR_ERR_INVALID;
62 }
63
64 return CSR_SUCCESS;
65}
66
70static struct ConfigDef PopVars[] = {
71 // clang-format off
72 { "pop_auth_try_all", DT_BOOL, true, 0, NULL,
73 "(pop) Try all available authentication methods"
74 },
75 { "pop_authenticators", DT_SLIST|D_SLIST_SEP_COLON, 0, 0, pop_auth_validator,
76 "(pop) List of allowed authentication methods (colon-separated)"
77 },
78 { "pop_check_interval", DT_NUMBER|D_INTEGER_NOT_NEGATIVE, 60, 0, NULL,
79 "(pop) Interval between checks for new mail"
80 },
81 { "pop_delete", DT_QUAD, MUTT_ASKNO, 0, NULL,
82 "(pop) After downloading POP messages, delete them on the server"
83 },
84 { "pop_host", DT_STRING, 0, 0, NULL,
85 "(pop) Url of the POP server"
86 },
87 { "pop_last", DT_BOOL, false, 0, NULL,
88 "(pop) Use the 'LAST' command to fetch new mail"
89 },
90 { "pop_oauth_refresh_command", DT_STRING|D_STRING_COMMAND|D_SENSITIVE, 0, 0, NULL,
91 "(pop) External command to generate OAUTH refresh token"
92 },
93 { "pop_pass", DT_STRING|D_SENSITIVE, 0, 0, NULL,
94 "(pop) Password of the POP server"
95 },
96 { "pop_reconnect", DT_QUAD, MUTT_ASKYES, 0, NULL,
97 "(pop) Reconnect to the server is the connection is lost"
98 },
99 { "pop_user", DT_STRING|D_SENSITIVE, 0, 0, NULL,
100 "(pop) Username of the POP server"
101 },
102
103 { "pop_checkinterval", DT_SYNONYM, IP "pop_check_interval", IP "2021-02-11" },
104 { NULL },
105 // clang-format on
106};
107
112{
113 return cs_register_variables(cs, PopVars);
114}
int buf_printf(struct Buffer *buf, const char *fmt,...)
Format a string overwriting a Buffer.
Definition: buffer.c:161
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:289
#define CSR_ERR_INVALID
Value hasn't been set.
Definition: set.h:36
#define CSR_SUCCESS
Action completed successfully.
Definition: set.h:33
#define IP
Definition: set.h:52
Connection Library.
static int pop_auth_validator(const struct ConfigDef *cdef, intptr_t value, struct Buffer *err)
Validate the "pop_authenticators" config variable - Implements ConfigDef::validator() -.
Definition: config.c:45
bool config_init_pop(struct ConfigSet *cs)
Register pop config variables - Implements module_init_config_t -.
Definition: config.c:111
Convenience wrapper for the library headers.
#define _(a)
Definition: message.h:28
bool pop_auth_is_valid(const char *authenticator)
Check if string is a valid pop authentication method.
Definition: auth.c:502
static struct ConfigDef PopVars[]
Config definitions for the POP library.
Definition: config.c:70
@ MUTT_ASKNO
Ask the user, defaulting to 'No'.
Definition: quad.h:40
@ MUTT_ASKYES
Ask the user, defaulting to 'Yes'.
Definition: quad.h:41
#define STAILQ_FOREACH(var, head, field)
Definition: queue.h:390
bool sasl_auth_validator(const char *authenticator)
Validate an auth method against Cyrus SASL methods.
Definition: sasl.c:136
GUI display the mailboxes in a side panel.
String manipulation buffer.
Definition: buffer.h:36
Definition: set.h:62
const char * name
User-visible name.
Definition: set.h:63
Container for lots of config items.
Definition: set.h:248
A List node for strings.
Definition: list.h:37
char * data
String.
Definition: list.h:38
String list.
Definition: slist.h:37
struct ListHead head
List containing values.
Definition: slist.h:38
size_t count
Number of values in list.
Definition: slist.h:39
#define D_SLIST_SEP_COLON
Slist items are colon-separated.
Definition: types.h:111
#define D_STRING_COMMAND
A command.
Definition: types.h:98
@ DT_NUMBER
a number
Definition: types.h:38
@ DT_SLIST
a list of strings
Definition: types.h:42
@ DT_BOOL
boolean option
Definition: types.h:32
@ DT_QUAD
quad-option (no/yes/ask-no/ask-yes)
Definition: types.h:40
@ DT_SYNONYM
synonym for another variable
Definition: types.h:45
@ DT_STRING
a string
Definition: types.h:44
#define D_SENSITIVE
Contains sensitive value, e.g. password.
Definition: types.h:80
#define D_INTEGER_NOT_NEGATIVE
Negative numbers are not allowed.
Definition: types.h:100