diff options
Diffstat (limited to 'src/lib-smtp/smtp-submit-settings.c')
-rw-r--r-- | src/lib-smtp/smtp-submit-settings.c | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/src/lib-smtp/smtp-submit-settings.c b/src/lib-smtp/smtp-submit-settings.c new file mode 100644 index 0000000..cfe4afd --- /dev/null +++ b/src/lib-smtp/smtp-submit-settings.c @@ -0,0 +1,69 @@ +/* Copyright (c) 2017-2018 Dovecot authors, see the included COPYING file */ + +#include "lib.h" +#include "hostpid.h" +#include "settings-parser.h" +#include "smtp-submit-settings.h" + +#include <stddef.h> + +static bool smtp_submit_settings_check(void *_set, pool_t pool, const char **error_r); + +#undef DEF +#undef DEFLIST +#define DEF(type, name) \ + SETTING_DEFINE_STRUCT_##type(#name, name, struct smtp_submit_settings) +#define DEFLIST(field, name, defines) \ + { .type = SET_DEFLIST, .key = name, \ + .offset = offsetof(struct smtp_submit_settings, field), \ + .list_info = defines } + +static const struct setting_define smtp_submit_setting_defines[] = { + DEF(STR, hostname), + DEF(BOOL, mail_debug), + + DEF(STR_VARS, submission_host), + DEF(STR_VARS, sendmail_path), + DEF(TIME, submission_timeout), + + DEF(ENUM, submission_ssl), + + SETTING_DEFINE_LIST_END +}; + +static const struct smtp_submit_settings smtp_submit_default_settings = { + .hostname = "", + .mail_debug = FALSE, + + .submission_host = "", + .sendmail_path = "/usr/sbin/sendmail", + .submission_timeout = 30, + + .submission_ssl = "no:smtps:submissions:starttls", +}; + +const struct setting_parser_info smtp_submit_setting_parser_info = { + .module_name = "smtp-submit", + .defines = smtp_submit_setting_defines, + .defaults = &smtp_submit_default_settings, + + .type_offset = SIZE_MAX, + .struct_size = sizeof(struct smtp_submit_settings), + + .parent_offset = SIZE_MAX, + +#ifndef CONFIG_BINARY + .check_func = smtp_submit_settings_check, +#endif +}; + +static bool +smtp_submit_settings_check(void *_set, pool_t pool, + const char **error_r ATTR_UNUSED) +{ + struct smtp_submit_settings *set = _set; + + if (*set->hostname == '\0') + set->hostname = p_strdup(pool, my_hostdomain()); + return TRUE; +} |