Mercurial > dovecot > core-2.2
annotate src/lib-storage/index/imapc/imapc-settings.c @ 23017:c1d36f2575c7 default tip
lib-imap: Fix "Don't accept strings with NULs" cherry-pick
author | Timo Sirainen <timo.sirainen@open-xchange.com> |
---|---|
date | Thu, 29 Aug 2019 09:55:25 +0300 |
parents | 74dc3b764627 |
children |
rev | line source |
---|---|
22713
cb108f786fb4
Updated copyright notices to include the year 2018.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents:
21983
diff
changeset
|
1 /* Copyright (c) 2011-2018 Dovecot authors, see the included COPYING file */ |
12625
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2 |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
3 #include "lib.h" |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
4 #include "settings-parser.h" |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
5 #include "mail-storage-settings.h" |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
6 #include "imapc-settings.h" |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
7 |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
8 #include <stddef.h> |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
9 |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
10 #undef DEF |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
11 #define DEF(type, name) \ |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
12 { type, #name, offsetof(struct imapc_settings, name), NULL } |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
13 |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
14 static bool imapc_settings_check(void *_set, pool_t pool, const char **error_r); |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
15 |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
16 static const struct setting_define imapc_setting_defines[] = { |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
17 DEF(SET_STR, imapc_host), |
19035
aabfe48db1cf
Changed type of internet port values to in_port_t everywhere.
Stephan Bosch <stephan@rename-it.nl>
parents:
18404
diff
changeset
|
18 DEF(SET_IN_PORT, imapc_port), |
12625
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
19 |
12627
e945bf4f1e59
imapc: Default imapc_user to %u.
Timo Sirainen <tss@iki.fi>
parents:
12625
diff
changeset
|
20 DEF(SET_STR_VARS, imapc_user), |
13916
b860d38f6b9e
imapc: Added imapc_master_user setting.
Timo Sirainen <tss@iki.fi>
parents:
13775
diff
changeset
|
21 DEF(SET_STR_VARS, imapc_master_user), |
12625
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
22 DEF(SET_STR, imapc_password), |
18142
fba6355ddb8a
imapc: Added imapc_sasl_mechanisms setting
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
23 DEF(SET_STR, imapc_sasl_mechanisms), |
12625
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
24 |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
25 DEF(SET_ENUM, imapc_ssl), |
13635
63ac3b1c2950
imapc: Added imapc_ssl_verify setting.
Timo Sirainen <tss@iki.fi>
parents:
13535
diff
changeset
|
26 DEF(SET_BOOL, imapc_ssl_verify), |
12625
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
27 |
14403
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
28 DEF(SET_STR, imapc_features), |
13535
87662d9ceff8
imapc: Added imapc_rawlog_dir setting.
Timo Sirainen <tss@iki.fi>
parents:
12627
diff
changeset
|
29 DEF(SET_STR, imapc_rawlog_dir), |
14495
03f44d61d582
imapc: Added imapc_list_prefix setting to limit what mailboxes are accessed.
Timo Sirainen <tss@iki.fi>
parents:
14457
diff
changeset
|
30 DEF(SET_STR, imapc_list_prefix), |
19621
3afca95bb5b5
imapc: Added imapc_cmd_timeout setting to control the command wait timeouts.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19620
diff
changeset
|
31 DEF(SET_TIME, imapc_cmd_timeout), |
14933
f33e3ac28e1d
imapc: Added imapc_max_idle_time setting to force activity on connection.
Timo Sirainen <tss@iki.fi>
parents:
14495
diff
changeset
|
32 DEF(SET_TIME, imapc_max_idle_time), |
21885
f77c4615bc7c
lib-imap-client: Make retry count and interval configurable
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21826
diff
changeset
|
33 DEF(SET_UINT, imapc_connection_retry_count), |
21907
5c65e7091077
imapc: Remove "_sec" suffix from imapc_connection_retry_interval_secs
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21885
diff
changeset
|
34 DEF(SET_TIME, imapc_connection_retry_interval), |
20826
dd023ac91c67
imapc: Added imapc_max_line_length to limit maximum memory usage.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20049
diff
changeset
|
35 DEF(SET_SIZE, imapc_max_line_length), |
14933
f33e3ac28e1d
imapc: Added imapc_max_idle_time setting to force activity on connection.
Timo Sirainen <tss@iki.fi>
parents:
14495
diff
changeset
|
36 |
18187
df92d09acc63
imapc: Implemented imapc_features=gmail-pop3 that also migrates pop3_deleted_flag.
Timo Sirainen <tss@iki.fi>
parents:
18185
diff
changeset
|
37 DEF(SET_STR, pop3_deleted_flag), |
df92d09acc63
imapc: Implemented imapc_features=gmail-pop3 that also migrates pop3_deleted_flag.
Timo Sirainen <tss@iki.fi>
parents:
18185
diff
changeset
|
38 |
12625
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
39 SETTING_DEFINE_LIST_END |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
40 }; |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
41 |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
42 static const struct imapc_settings imapc_default_settings = { |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
43 .imapc_host = "", |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
44 .imapc_port = 143, |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
45 |
16435
199769f2979f
imapc: Changed imapc_user setting's default to empty.
Timo Sirainen <tss@iki.fi>
parents:
16039
diff
changeset
|
46 .imapc_user = "", |
13916
b860d38f6b9e
imapc: Added imapc_master_user setting.
Timo Sirainen <tss@iki.fi>
parents:
13775
diff
changeset
|
47 .imapc_master_user = "", |
12625
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
48 .imapc_password = "", |
18142
fba6355ddb8a
imapc: Added imapc_sasl_mechanisms setting
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
49 .imapc_sasl_mechanisms = "", |
12625
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
50 |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
51 .imapc_ssl = "no:imaps:starttls", |
13635
63ac3b1c2950
imapc: Added imapc_ssl_verify setting.
Timo Sirainen <tss@iki.fi>
parents:
13535
diff
changeset
|
52 .imapc_ssl_verify = TRUE, |
13535
87662d9ceff8
imapc: Added imapc_rawlog_dir setting.
Timo Sirainen <tss@iki.fi>
parents:
12627
diff
changeset
|
53 |
14403
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
54 .imapc_features = "", |
13775
e8c6ff480a18
imapc: Pass ssl_crypto_device setting to lib-ssl-iostream.
Timo Sirainen <tss@iki.fi>
parents:
13635
diff
changeset
|
55 .imapc_rawlog_dir = "", |
14495
03f44d61d582
imapc: Added imapc_list_prefix setting to limit what mailboxes are accessed.
Timo Sirainen <tss@iki.fi>
parents:
14457
diff
changeset
|
56 .imapc_list_prefix = "", |
19621
3afca95bb5b5
imapc: Added imapc_cmd_timeout setting to control the command wait timeouts.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19620
diff
changeset
|
57 .imapc_cmd_timeout = 5*60, |
18187
df92d09acc63
imapc: Implemented imapc_features=gmail-pop3 that also migrates pop3_deleted_flag.
Timo Sirainen <tss@iki.fi>
parents:
18185
diff
changeset
|
58 .imapc_max_idle_time = 60*29, |
21885
f77c4615bc7c
lib-imap-client: Make retry count and interval configurable
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21826
diff
changeset
|
59 .imapc_connection_retry_count = 1, |
21931
b5354d209c42
imapc: Change imapc_connection_retry_interval default to be 1 second.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21907
diff
changeset
|
60 .imapc_connection_retry_interval = 1, |
20826
dd023ac91c67
imapc: Added imapc_max_line_length to limit maximum memory usage.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20049
diff
changeset
|
61 .imapc_max_line_length = 0, |
18187
df92d09acc63
imapc: Implemented imapc_features=gmail-pop3 that also migrates pop3_deleted_flag.
Timo Sirainen <tss@iki.fi>
parents:
18185
diff
changeset
|
62 |
df92d09acc63
imapc: Implemented imapc_features=gmail-pop3 that also migrates pop3_deleted_flag.
Timo Sirainen <tss@iki.fi>
parents:
18185
diff
changeset
|
63 .pop3_deleted_flag = "" |
12625
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
64 }; |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
65 |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
66 static const struct setting_parser_info imapc_setting_parser_info = { |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
67 .module_name = "imapc", |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
68 .defines = imapc_setting_defines, |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
69 .defaults = &imapc_default_settings, |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
70 |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
71 .type_offset = (size_t)-1, |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
72 .struct_size = sizeof(struct imapc_settings), |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
73 |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
74 .parent_offset = (size_t)-1, |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
75 .parent = &mail_user_setting_parser_info, |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
76 |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
77 .check_func = imapc_settings_check |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
78 }; |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
79 |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
80 const struct setting_parser_info *imapc_get_setting_parser_info(void) |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
81 { |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
82 return &imapc_setting_parser_info; |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
83 } |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
84 |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
85 /* <settings checks> */ |
14403
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
86 struct imapc_feature_list { |
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
87 const char *name; |
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
88 enum imapc_features num; |
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
89 }; |
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
90 |
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
91 static const struct imapc_feature_list imapc_feature_list[] = { |
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
92 { "rfc822.size", IMAPC_FEATURE_RFC822_SIZE }, |
14457
16ed300484c9
imapc: Added guid-forced feature to use SHA1(message) as GUID.
Timo Sirainen <tss@iki.fi>
parents:
14403
diff
changeset
|
93 { "guid-forced", IMAPC_FEATURE_GUID_FORCED }, |
16958
00fc1e040603
imapc: Added imapc_feature fetch-header.
Timo Sirainen <tss@iki.fi>
parents:
16435
diff
changeset
|
94 { "fetch-headers", IMAPC_FEATURE_FETCH_HEADERS }, |
18199
111dcc2ca272
imapc: Merged gmail-pop3 and gmail-labels-keyword features into a single gmail-migration feature
Timo Sirainen <tss@iki.fi>
parents:
18187
diff
changeset
|
95 { "gmail-migration", IMAPC_FEATURE_GMAIL_MIGRATION }, |
18215
405959839f48
imapc: Added imapc_features=search support for sending SEARCH commands.
Timo Sirainen <tss@iki.fi>
parents:
18199
diff
changeset
|
96 { "search", IMAPC_FEATURE_SEARCH }, |
18404
1c17f06d5e52
imapc: Added imapc_features=zimbra-workarounds
Timo Sirainen <tss@iki.fi>
parents:
18331
diff
changeset
|
97 { "zimbra-workarounds", IMAPC_FEATURE_ZIMBRA_WORKAROUNDS }, |
19564
4d671a0e6219
imapc: Added imapc_features = no-examine
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19552
diff
changeset
|
98 { "no-examine", IMAPC_FEATURE_NO_EXAMINE }, |
19579
f82dca1e2547
imapc: Added support for PROXYAUTH command by setting imapc_features = proxyauth
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19564
diff
changeset
|
99 { "proxyauth", IMAPC_FEATURE_PROXYAUTH }, |
19620
9658506bb3ab
imapc: Added imapc_features=fetch-msn-workarounds
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19579
diff
changeset
|
100 { "fetch-msn-workarounds", IMAPC_FEATURE_FETCH_MSN_WORKAROUNDS }, |
19622
8368689f036b
imapc: Added imapc_features=fetch-fix-broken-mails
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19621
diff
changeset
|
101 { "fetch-fix-broken-mails", IMAPC_FEATURE_FETCH_FIX_BROKEN_MAILS }, |
20049
713cb90f4ce8
imapc: Added support for imapc_features=modseq
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19622
diff
changeset
|
102 { "modseq", IMAPC_FEATURE_MODSEQ }, |
21826
bb83a3781301
imapc: Add imapc_features=delay-login
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
103 { "delay-login", IMAPC_FEATURE_DELAY_LOGIN }, |
21983
33dbc4cdd0c5
imapc: Add imapc_features=fetch-bodystructure
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21931
diff
changeset
|
104 { "fetch-bodystructure", IMAPC_FEATURE_FETCH_BODYSTRUCTURE }, |
22730
c7add8c032df
imapc: Add imapc_features=fetch-empty-is-expunged
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22713
diff
changeset
|
105 { "fetch-empty-is-expunged", IMAPC_FEATURE_FETCH_EMPTY_IS_EXPUNGED }, |
22764
74dc3b764627
imapc: Add imapc_features=no-msn-updates
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22730
diff
changeset
|
106 { "no-msn-updates", IMAPC_FEATURE_NO_MSN_UPDATES }, |
14403
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
107 { NULL, 0 } |
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
108 }; |
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
109 |
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
110 static int |
18331
1bccf90e54ca
imapc: Added throttling settings to imapc_features=throttle:a:b:c
Timo Sirainen <tss@iki.fi>
parents:
18215
diff
changeset
|
111 imapc_settings_parse_throttle(struct imapc_settings *set, |
1bccf90e54ca
imapc: Added throttling settings to imapc_features=throttle:a:b:c
Timo Sirainen <tss@iki.fi>
parents:
18215
diff
changeset
|
112 const char *throttle_str, const char **error_r) |
1bccf90e54ca
imapc: Added throttling settings to imapc_features=throttle:a:b:c
Timo Sirainen <tss@iki.fi>
parents:
18215
diff
changeset
|
113 { |
1bccf90e54ca
imapc: Added throttling settings to imapc_features=throttle:a:b:c
Timo Sirainen <tss@iki.fi>
parents:
18215
diff
changeset
|
114 const char *const *tmp; |
1bccf90e54ca
imapc: Added throttling settings to imapc_features=throttle:a:b:c
Timo Sirainen <tss@iki.fi>
parents:
18215
diff
changeset
|
115 |
1bccf90e54ca
imapc: Added throttling settings to imapc_features=throttle:a:b:c
Timo Sirainen <tss@iki.fi>
parents:
18215
diff
changeset
|
116 tmp = t_strsplit(throttle_str, ":"); |
1bccf90e54ca
imapc: Added throttling settings to imapc_features=throttle:a:b:c
Timo Sirainen <tss@iki.fi>
parents:
18215
diff
changeset
|
117 if (str_array_length(tmp) != 3 || |
1bccf90e54ca
imapc: Added throttling settings to imapc_features=throttle:a:b:c
Timo Sirainen <tss@iki.fi>
parents:
18215
diff
changeset
|
118 str_to_uint(tmp[0], &set->throttle_init_msecs) < 0 || |
1bccf90e54ca
imapc: Added throttling settings to imapc_features=throttle:a:b:c
Timo Sirainen <tss@iki.fi>
parents:
18215
diff
changeset
|
119 str_to_uint(tmp[1], &set->throttle_max_msecs) < 0 || |
1bccf90e54ca
imapc: Added throttling settings to imapc_features=throttle:a:b:c
Timo Sirainen <tss@iki.fi>
parents:
18215
diff
changeset
|
120 str_to_uint(tmp[2], &set->throttle_shrink_min_msecs) < 0) { |
1bccf90e54ca
imapc: Added throttling settings to imapc_features=throttle:a:b:c
Timo Sirainen <tss@iki.fi>
parents:
18215
diff
changeset
|
121 *error_r = "imapc_features: Invalid throttle settings"; |
1bccf90e54ca
imapc: Added throttling settings to imapc_features=throttle:a:b:c
Timo Sirainen <tss@iki.fi>
parents:
18215
diff
changeset
|
122 return -1; |
1bccf90e54ca
imapc: Added throttling settings to imapc_features=throttle:a:b:c
Timo Sirainen <tss@iki.fi>
parents:
18215
diff
changeset
|
123 } |
1bccf90e54ca
imapc: Added throttling settings to imapc_features=throttle:a:b:c
Timo Sirainen <tss@iki.fi>
parents:
18215
diff
changeset
|
124 return 0; |
1bccf90e54ca
imapc: Added throttling settings to imapc_features=throttle:a:b:c
Timo Sirainen <tss@iki.fi>
parents:
18215
diff
changeset
|
125 } |
1bccf90e54ca
imapc: Added throttling settings to imapc_features=throttle:a:b:c
Timo Sirainen <tss@iki.fi>
parents:
18215
diff
changeset
|
126 |
1bccf90e54ca
imapc: Added throttling settings to imapc_features=throttle:a:b:c
Timo Sirainen <tss@iki.fi>
parents:
18215
diff
changeset
|
127 static int |
14403
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
128 imapc_settings_parse_features(struct imapc_settings *set, |
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
129 const char **error_r) |
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
130 { |
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
131 enum imapc_features features = 0; |
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
132 const struct imapc_feature_list *list; |
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
133 const char *const *str; |
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
134 |
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
135 str = t_strsplit_spaces(set->imapc_features, " ,"); |
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
136 for (; *str != NULL; str++) { |
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
137 list = imapc_feature_list; |
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
138 for (; list->name != NULL; list++) { |
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
139 if (strcasecmp(*str, list->name) == 0) { |
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
140 features |= list->num; |
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
141 break; |
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
142 } |
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
143 } |
18331
1bccf90e54ca
imapc: Added throttling settings to imapc_features=throttle:a:b:c
Timo Sirainen <tss@iki.fi>
parents:
18215
diff
changeset
|
144 if (strncasecmp(*str, "throttle:", 9) == 0) { |
1bccf90e54ca
imapc: Added throttling settings to imapc_features=throttle:a:b:c
Timo Sirainen <tss@iki.fi>
parents:
18215
diff
changeset
|
145 if (imapc_settings_parse_throttle(set, *str + 9, error_r) < 0) |
1bccf90e54ca
imapc: Added throttling settings to imapc_features=throttle:a:b:c
Timo Sirainen <tss@iki.fi>
parents:
18215
diff
changeset
|
146 return -1; |
1bccf90e54ca
imapc: Added throttling settings to imapc_features=throttle:a:b:c
Timo Sirainen <tss@iki.fi>
parents:
18215
diff
changeset
|
147 continue; |
1bccf90e54ca
imapc: Added throttling settings to imapc_features=throttle:a:b:c
Timo Sirainen <tss@iki.fi>
parents:
18215
diff
changeset
|
148 } |
14403
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
149 if (list->name == NULL) { |
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
150 *error_r = t_strdup_printf("imapc_features: " |
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
151 "Unknown feature: %s", *str); |
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
152 return -1; |
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
153 } |
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
154 } |
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
155 set->parsed_features = features; |
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
156 return 0; |
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
157 } |
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
158 |
12625
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
159 static bool imapc_settings_check(void *_set, pool_t pool ATTR_UNUSED, |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
160 const char **error_r) |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
161 { |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
162 struct imapc_settings *set = _set; |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
163 |
15153
fd863826c892
imapc: Added IMAPC_DEFAULT_MAX_IDLE_TIME macro.
Timo Sirainen <tss@iki.fi>
parents:
14933
diff
changeset
|
164 if (set->imapc_max_idle_time == 0) { |
fd863826c892
imapc: Added IMAPC_DEFAULT_MAX_IDLE_TIME macro.
Timo Sirainen <tss@iki.fi>
parents:
14933
diff
changeset
|
165 *error_r = "imapc_max_idle_time must not be 0"; |
fd863826c892
imapc: Added IMAPC_DEFAULT_MAX_IDLE_TIME macro.
Timo Sirainen <tss@iki.fi>
parents:
14933
diff
changeset
|
166 return FALSE; |
fd863826c892
imapc: Added IMAPC_DEFAULT_MAX_IDLE_TIME macro.
Timo Sirainen <tss@iki.fi>
parents:
14933
diff
changeset
|
167 } |
14403
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
168 if (imapc_settings_parse_features(set, error_r) < 0) |
6a8b78450202
imapc: Added imapc_features=rfc822.size setting to use RFC822.size for physical sizes.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
169 return FALSE; |
12625
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
170 return TRUE; |
495fb0e9f7cc
imapc: Moved settings from plugin {} section to proper imapc_* settings.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
171 } |