From: Stephan Bosch Date: Thu, 14 Sep 2017 22:10:30 +0000 (+0200) Subject: lib-smtp: smtp-submit: Made settings parseable. X-Git-Tag: 2.3.0.rc1~930 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5356717c7944a8527b6ea10ac54012887bcc9f75;p=thirdparty%2Fdovecot%2Fcore.git lib-smtp: smtp-submit: Made settings parseable. --- diff --git a/src/lib-smtp/Makefile.am b/src/lib-smtp/Makefile.am index 67c8ac893e..376cb8957f 100644 --- a/src/lib-smtp/Makefile.am +++ b/src/lib-smtp/Makefile.am @@ -3,6 +3,7 @@ noinst_LTLIBRARIES = libsmtp.la AM_CPPFLAGS = \ -I$(top_srcdir)/src/lib \ -I$(top_srcdir)/src/lib-test \ + -I$(top_srcdir)/src/lib-settings \ -I$(top_srcdir)/src/lib-master \ -I$(top_srcdir)/src/lib-dns \ -I$(top_srcdir)/src/lib-program-client \ @@ -11,10 +12,12 @@ AM_CPPFLAGS = \ libsmtp_la_SOURCES = \ lmtp-client.c \ + smtp-submit-settings.c \ smtp-submit.c headers = \ lmtp-client.h \ + smtp-submit-settings.h \ smtp-submit.h pkginc_libdir=$(pkgincludedir) diff --git a/src/lib-smtp/smtp-submit-settings.c b/src/lib-smtp/smtp-submit-settings.c new file mode 100644 index 0000000000..138491a3ee --- /dev/null +++ b/src/lib-smtp/smtp-submit-settings.c @@ -0,0 +1,57 @@ +/* Copyright (c) 2017 Dovecot authors, see the included COPYING file */ + +#include "lib.h" +#include "hostpid.h" +#include "settings-parser.h" +#include "smtp-submit-settings.h" + +#include + +static bool smtp_submit_settings_check(void *_set, pool_t pool, const char **error_r); + +#undef DEF +#undef DEFLIST +#define DEF(type, name) \ + { type, #name, offsetof(struct smtp_submit_settings, name), NULL } +#define DEFLIST(field, name, defines) \ + { SET_DEFLIST, name, offsetof(struct smtp_submit_settings, field), defines } + +static const struct setting_define smtp_submit_setting_defines[] = { + DEF(SET_STR, hostname), + DEF(SET_STR_VARS, submission_host), + DEF(SET_STR_VARS, sendmail_path), + + SETTING_DEFINE_LIST_END +}; + +static const struct smtp_submit_settings smtp_submit_default_settings = { + .hostname = "", + .submission_host = "", + .sendmail_path = "/usr/sbin/sendmail", +}; + +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_t)-1, + .struct_size = sizeof(struct smtp_submit_settings), + + .parent_offset = (size_t)-1, + +#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; +} diff --git a/src/lib-smtp/smtp-submit-settings.h b/src/lib-smtp/smtp-submit-settings.h new file mode 100644 index 0000000000..8792d4e4f8 --- /dev/null +++ b/src/lib-smtp/smtp-submit-settings.h @@ -0,0 +1,12 @@ +#ifndef SMTP_SUBMIT_SETTINGS_H +#define SMTP_SUBMIT_SETTINGS_H + +struct smtp_submit_settings { + const char *hostname; + const char *submission_host; + const char *sendmail_path; +}; + +extern const struct setting_parser_info smtp_submit_setting_parser_info; + +#endif diff --git a/src/lib-smtp/smtp-submit.h b/src/lib-smtp/smtp-submit.h index c461397e36..40c17bdfa3 100644 --- a/src/lib-smtp/smtp-submit.h +++ b/src/lib-smtp/smtp-submit.h @@ -1,15 +1,12 @@ #ifndef SMTP_SUBMIT_H #define SMTP_SUBMIT_H +#include "smtp-submit-settings.h" + +struct smtp_submit_settings; struct smtp_submit_session; struct smtp_submit; -struct smtp_submit_settings { - const char *hostname; - const char *submission_host; - const char *sendmail_path; -}; - struct smtp_submit_result { /* 1 on success, 0 on permanent failure (e.g. invalid destination),