1 /* Copyright (c) 2005-2018 Dovecot authors, see the included COPYING file */
2 
3 #include "lib.h"
4 #include "buffer.h"
5 #include "settings-parser.h"
6 #include "service-settings.h"
7 #include "login-settings.h"
8 #include "imap-login-settings.h"
9 
10 #include <stddef.h>
11 
12 /* <settings checks> */
13 static struct inet_listener_settings imap_login_inet_listeners_array[] = {
14 	{ .name = "imap", .address = "", .port = 143 },
15 	{ .name = "imaps", .address = "", .port = 993, .ssl = TRUE }
16 };
17 static struct inet_listener_settings *imap_login_inet_listeners[] = {
18 	&imap_login_inet_listeners_array[0],
19 	&imap_login_inet_listeners_array[1]
20 };
21 static buffer_t imap_login_inet_listeners_buf = {
22 	{ { imap_login_inet_listeners, sizeof(imap_login_inet_listeners) } }
23 };
24 /* </settings checks> */
25 
26 struct service_settings imap_login_service_settings = {
27 	.name = "imap-login",
28 	.protocol = "imap",
29 	.type = "login",
30 	.executable = "imap-login",
31 	.user = "$default_login_user",
32 	.group = "",
33 	.privileged_group = "",
34 	.extra_groups = "",
35 	.chroot = "login",
36 
37 	.drop_priv_before_exec = FALSE,
38 
39 	.process_min_avail = 0,
40 	.process_limit = 0,
41 	.client_limit = 0,
42 	.service_count = 1,
43 	.idle_kill = 0,
44 	.vsz_limit = UOFF_T_MAX,
45 
46 	.unix_listeners = ARRAY_INIT,
47 	.fifo_listeners = ARRAY_INIT,
48 	.inet_listeners = { { &imap_login_inet_listeners_buf,
49 			      sizeof(imap_login_inet_listeners[0]) } }
50 };
51 
52 #undef DEF
53 #define DEF(type, name) \
54 	SETTING_DEFINE_STRUCT_##type(#name, name, struct imap_login_settings)
55 
56 static const struct setting_define imap_login_setting_defines[] = {
57 	DEF(STR, imap_capability),
58 	DEF(STR, imap_id_send),
59 	DEF(STR, imap_id_log),
60 	DEF(BOOL, imap_literal_minus),
61 	DEF(BOOL, imap_id_retain),
62 
63 	SETTING_DEFINE_LIST_END
64 };
65 
66 static const struct imap_login_settings imap_login_default_settings = {
67 	.imap_capability = "",
68 	.imap_id_send = "name *",
69 	.imap_id_log = "",
70 	.imap_literal_minus = FALSE,
71 	.imap_id_retain = FALSE,
72 };
73 
74 static const struct setting_parser_info *imap_login_setting_dependencies[] = {
75 	&login_setting_parser_info,
76 	NULL
77 };
78 
79 static const struct setting_parser_info imap_login_setting_parser_info = {
80 	.module_name = "imap-login",
81 	.defines = imap_login_setting_defines,
82 	.defaults = &imap_login_default_settings,
83 
84 	.type_offset = SIZE_MAX,
85 	.struct_size = sizeof(struct imap_login_settings),
86 
87 	.parent_offset = SIZE_MAX,
88 	.dependencies = imap_login_setting_dependencies
89 };
90 
91 const struct setting_parser_info *imap_login_setting_roots[] = {
92 	&login_setting_parser_info,
93 	&imap_login_setting_parser_info,
94 	NULL
95 };
96