]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-smtp: smtp-submit: Made settings parseable.
authorStephan Bosch <stephan.bosch@dovecot.fi>
Thu, 14 Sep 2017 22:10:30 +0000 (00:10 +0200)
committerTimo Sirainen <tss@dovecot.fi>
Wed, 4 Oct 2017 22:07:46 +0000 (01:07 +0300)
src/lib-smtp/Makefile.am
src/lib-smtp/smtp-submit-settings.c [new file with mode: 0644]
src/lib-smtp/smtp-submit-settings.h [new file with mode: 0644]
src/lib-smtp/smtp-submit.h

index 67c8ac893ec8645b98cd2db1b153e686cd4dc859..376cb8957fa88c3c68daddc51904ada1be9f78bb 100644 (file)
@@ -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 (file)
index 0000000..138491a
--- /dev/null
@@ -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 <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) \
+       { 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 (file)
index 0000000..8792d4e
--- /dev/null
@@ -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
index c461397e367a7526d8c528f1cdf199e188318be4..40c17bdfa38d58e5fd73a9bc36c2f24ba712d1a3 100644 (file)
@@ -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),