1 /* Copyright (c) 2013-2018 Dovecot authors, see the included COPYING file */
2
3 #include "lib.h"
4 #include "hostpid.h"
5 #include "buffer.h"
6 #include "settings-parser.h"
7 #include "service-settings.h"
8 #include "login-settings.h"
9 #include "submission-login-settings.h"
10
11 #include <stddef.h>
12
13 static bool
14 submission_login_settings_check(void *_set, pool_t pool, const char **error_r);
15
16 /* <settings checks> */
17 static struct inet_listener_settings submission_login_inet_listeners_array[] = {
18 { .name = "submission", .address = "", .port = 587 },
19 { .name = "submissions", .address = "", .port = 465, .ssl = TRUE }
20 };
21 static struct inet_listener_settings *submission_login_inet_listeners[] = {
22 &submission_login_inet_listeners_array[0]
23 };
24 static buffer_t submission_login_inet_listeners_buf = {
25 { { submission_login_inet_listeners,
26 sizeof(submission_login_inet_listeners) } }
27 };
28
29 /* </settings checks> */
30 struct service_settings submission_login_service_settings = {
31 .name = "submission-login",
32 .protocol = "submission",
33 .type = "login",
34 .executable = "submission-login",
35 .user = "$default_login_user",
36 .group = "",
37 .privileged_group = "",
38 .extra_groups = "",
39 .chroot = "login",
40
41 .drop_priv_before_exec = FALSE,
42
43 .process_min_avail = 0,
44 .process_limit = 0,
45 .client_limit = 0,
46 .service_count = 1,
47 .idle_kill = 0,
48 .vsz_limit = UOFF_T_MAX,
49
50 .unix_listeners = ARRAY_INIT,
51 .fifo_listeners = ARRAY_INIT,
52 .inet_listeners = { { &submission_login_inet_listeners_buf,
53 sizeof(submission_login_inet_listeners[0]) } }
54 };
55
56 #undef DEF
57 #define DEF(type, name) \
58 SETTING_DEFINE_STRUCT_##type(#name, name, struct submission_login_settings)
59
60 static const struct setting_define submission_login_setting_defines[] = {
61 DEF(STR, hostname),
62
63 DEF(SIZE, submission_max_mail_size),
64 DEF(STR, submission_backend_capabilities),
65
66 SETTING_DEFINE_LIST_END
67 };
68
69 static const struct submission_login_settings submission_login_default_settings = {
70 .hostname = "",
71
72 .submission_max_mail_size = 0,
73 .submission_backend_capabilities = NULL
74 };
75
76 static const struct setting_parser_info *submission_login_setting_dependencies[] = {
77 &login_setting_parser_info,
78 NULL
79 };
80
81 const struct setting_parser_info submission_login_setting_parser_info = {
82 .module_name = "submission-login",
83 .defines = submission_login_setting_defines,
84 .defaults = &submission_login_default_settings,
85
86 .type_offset = SIZE_MAX,
87 .struct_size = sizeof(struct submission_login_settings),
88 .parent_offset = SIZE_MAX,
89
90 #ifndef CONFIG_BINARY
91 .check_func = submission_login_settings_check,
92 #endif
93 .dependencies = submission_login_setting_dependencies
94 };
95
96 const struct setting_parser_info *submission_login_setting_roots[] = {
97 &login_setting_parser_info,
98 &submission_login_setting_parser_info,
99 NULL
100 };
101
102 static bool
submission_login_settings_check(void * _set,pool_t pool,const char ** error_r ATTR_UNUSED)103 submission_login_settings_check(void *_set, pool_t pool,
104 const char **error_r ATTR_UNUSED)
105 {
106 struct submission_login_settings *set = _set;
107
108 if (*set->hostname == '\0')
109 set->hostname = p_strdup(pool, my_hostdomain());
110 return TRUE;
111 }
112