]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lda/lmtp: Parse SMTP submit settings.
authorStephan Bosch <stephan.bosch@dovecot.fi>
Thu, 14 Sep 2017 23:13:18 +0000 (01:13 +0200)
committerTimo Sirainen <tss@dovecot.fi>
Wed, 4 Oct 2017 22:07:46 +0000 (01:07 +0300)
configure.ac
src/config/settings-get.pl
src/lda/Makefile.am
src/lda/main.c
src/lib-lda/lda-settings.c
src/lib-lda/mail-deliver.h
src/lmtp/commands.c
src/lmtp/lmtp-settings.c
src/lmtp/main.c

index d4a2087b9b6fb191b06eb396f1fb15f1e088ef5a..89996f15d130e07518ad357fb19a4e76475a4930 100644 (file)
@@ -751,7 +751,7 @@ dnl ** Settings
 dnl **
 
 dnl get a list of setting .[ch] files, but list .h files first
-FILES1=`find $srcdir/src -name '*settings.[[ch]]'|grep "$srcdir/src/lib-" | sed 's/^\(.*\)\(.\)$/\2 \1\2/' | grep -v 'lib-master.*c$' | sort -r | sed s/^..//`
+FILES1=`find $srcdir/src -name '*settings.[[ch]]'|grep "$srcdir/src/lib-" | sed 's/^\(.*\)\(.\)$/\2 \1\2/' | grep -E -v 'lib-(master|smtp).*c$' | sort -r | sed s/^..//`
 FILES2=`find $srcdir/src -name '*settings.[[ch]]'|grep -v "$srcdir/src/lib-" | sed 's/^\(.*\)\(.\)$/\2 \1\2/' | grep -v all-settings | sort -r | sed s/^..//`
 SETTING_FILES=`echo $FILES1 $FILES2 | sed -e s,$srcdir/src,./src,g -e 's,./src,$(top_srcdir)/src,g'`
 AC_SUBST(SETTING_FILES)
index 6bfb1598d1eefb9a03b159f96ec5727bd785bbd4..9c11f2872037c2bc3c7eb7b111251fadef897c34 100755 (executable)
@@ -139,6 +139,7 @@ print "};\n";
 print "const struct setting_parser_info *all_default_roots[] = {\n";
 print "\t&master_service_setting_parser_info,\n";
 print "\t&master_service_ssl_setting_parser_info,\n";
+print "\t&smtp_submit_setting_parser_info,\n";
 foreach my $name (keys %parsers) {
   my $module = $parsers{$name};
   next if (!$module);
index f474cb7b91a9b3d2b145c62d16079429302d8f0c..a066417ea4ac6968a893a84bb4201d8ba3663121 100644 (file)
@@ -6,6 +6,7 @@ AM_CPPFLAGS = \
        -I$(top_srcdir)/src/lib \
        -I$(top_srcdir)/src/lib-settings \
        -I$(top_srcdir)/src/lib-mail \
+       -I$(top_srcdir)/src/lib-smtp \
        -I$(top_srcdir)/src/lib-imap \
        -I$(top_srcdir)/src/lib-index \
        -I$(top_srcdir)/src/lib-master \
index aacf9ed278d9598521db7da9918130048fb34d65..2274b2accb6a0992618a9081bbe2d2c5b93096a9 100644 (file)
@@ -26,6 +26,7 @@
 #include "mail-deliver.h"
 #include "mail-send.h"
 #include "mbox-from.h"
+#include "smtp-submit-settings.h"
 #include "lda-settings.h"
 
 #include <stdio.h>
@@ -268,6 +269,7 @@ static void print_help(void)
 int main(int argc, char *argv[])
 {
        const struct setting_parser_info *set_roots[] = {
+               &smtp_submit_setting_parser_info,
                &lda_setting_parser_info,
                NULL
        };
@@ -275,6 +277,7 @@ int main(int argc, char *argv[])
        enum mail_storage_service_flags service_flags = 0;
        const char *user, *errstr, *path;
        struct lda_settings *lda_set;
+       struct smtp_submit_settings *smtp_set;
        struct mail_storage_service_ctx *storage_service;
        struct mail_storage_service_user *service_user;
        struct mail_storage_service_input service_input;
@@ -430,12 +433,22 @@ int main(int argc, char *argv[])
         lib_signals_ignore(SIGXFSZ, TRUE);
 #endif
        var_table = mail_user_var_expand_table(ctx.dest_user);
-       lda_set = mail_storage_service_user_get_set(service_user)[1];
-       if (settings_var_expand(&lda_setting_parser_info, lda_set,
-                               ctx.dest_user->pool, var_table,
-                               &errstr) <= 0)
+       smtp_set = mail_storage_service_user_get_set(service_user)[1];
+       lda_set = mail_storage_service_user_get_set(service_user)[2];
+       ret = settings_var_expand(
+               &lda_setting_parser_info,
+               lda_set, ctx.dest_user->pool, var_table,
+               &errstr);
+       if (ret > 0) {
+               ret = settings_var_expand(
+                       &smtp_submit_setting_parser_info,
+                       smtp_set, ctx.dest_user->pool, var_table,
+                       &errstr);
+       }
+       if (ret <= 0)
                i_fatal("Failed to expand settings: %s", errstr);
        ctx.set = lda_set;
+       ctx.smtp_set = smtp_set;
 
        if (ctx.dest_user->mail_debug && *user_source != '\0') {
                i_debug("userdb lookup skipped, username taken from %s",
index a9a140e075dcb6453a15a13f51bacaf93fef0388..4743c93ca467804fb5c1687ac18aecf6fa51fcd9 100644 (file)
@@ -4,6 +4,7 @@
 #include "hostpid.h"
 #include "settings-parser.h"
 #include "mail-storage-settings.h"
+#include "smtp-submit-settings.h"
 #include "lda-settings.h"
 
 #include <stddef.h>
@@ -52,6 +53,7 @@ static const struct lda_settings lda_default_settings = {
 
 static const struct setting_parser_info *lda_setting_dependencies[] = {
        &mail_user_setting_parser_info,
+       &smtp_submit_setting_parser_info,
        NULL
 };
 
index a49406647e248f1ed6534b58901d46243a478ef5..bce3aad40d892e22e6647c4a92e0a92aea00ceb5 100644 (file)
@@ -25,6 +25,7 @@ struct mail_deliver_session {
 struct mail_deliver_context {
        pool_t pool;
        const struct lda_settings *set;
+       const struct smtp_submit_settings *smtp_set;
        struct mail_deliver_session *session;
        unsigned int timeout_secs;
 
index 6513d80dc8f12977bf8376be91897eef2789134e..1eba17a2163b4ff562e81845e313d99f8f895d41 100644 (file)
@@ -25,6 +25,7 @@
 #include "auth-master.h"
 #include "mail-storage-service.h"
 #include "index/raw/raw-storage.h"
+#include "smtp-submit-settings.h"
 #include "lda-settings.h"
 #include "lmtp-settings.h"
 #include "mail-autoexpunge.h"
@@ -542,7 +543,7 @@ client_send_line_overquota(struct client *client,
                           const struct mail_recipient *rcpt, const char *error)
 {
        struct lda_settings *lda_set =
-               mail_storage_service_user_get_set(rcpt->service_user)[1];
+               mail_storage_service_user_get_set(rcpt->service_user)[2];
 
        client_send_line(client, "%s <%s> %s", lda_set->quota_full_tempfail ?
                         "452 4.2.2" : "552 5.2.2", rcpt->address, error);
@@ -811,6 +812,7 @@ client_deliver(struct client *client, const struct mail_recipient *rcpt,
        struct mail_storage *storage;
        const struct mail_storage_service_input *input;
        const struct mail_storage_settings *mail_set;
+       struct smtp_submit_settings *smtp_set;
        struct lda_settings *lda_set;
        struct mail_namespace *ns;
        struct setting_parser_context *set_parser;
@@ -858,9 +860,19 @@ client_deliver(struct client *client, const struct mail_recipient *rcpt,
 
        sets = mail_storage_service_user_get_set(rcpt->service_user);
        var_table = mail_user_var_expand_table(dest_user);
-       lda_set = sets[1];
-       if (settings_var_expand(&lda_setting_parser_info, lda_set, client->pool,
-                       var_table, &error) <= 0) {
+       smtp_set = sets[1];
+       lda_set = sets[2];
+       ret = settings_var_expand(
+               &smtp_submit_setting_parser_info,
+               smtp_set, client->pool, var_table,
+               &error);
+       if (ret > 0) {
+               ret = settings_var_expand(
+                       &lda_setting_parser_info,
+                       lda_set, client->pool, var_table,
+                       &error);
+       }
+       if (ret <= 0) {
                i_error("Failed to expand settings: %s", error);
                client_send_line(client, ERRSTR_TEMP_MAILBOX_FAIL,
                                 rcpt->address);
@@ -1138,7 +1150,7 @@ static const char *client_get_added_headers(struct client *client)
                        array_idx(&client->state.rcpt_to, 0);
 
                sets = mail_storage_service_user_get_set((*rcptp)->service_user);
-               lmtp_set = sets[2];
+               lmtp_set = sets[3];
 
                switch (lmtp_set->parsed_lmtp_hdr_delivery_address) {
                case LMTP_HDR_DELIVERY_ADDRESS_NONE:
index 88b31319f920c8985c2c58e8145e0315a1adeaf7..004e14b32754d3321eb05ea84f9f6565336abde6 100644 (file)
@@ -134,6 +134,6 @@ void lmtp_settings_dup(const struct setting_parser_context *set_parser,
 
        sets = master_service_settings_parser_get_others(master_service,
                                                         set_parser);
-       *lda_set_r = settings_dup(&lda_setting_parser_info, sets[1], pool);
-       *lmtp_set_r = settings_dup(&lmtp_setting_parser_info, sets[2], pool);
+       *lda_set_r = settings_dup(&lda_setting_parser_info, sets[2], pool);
+       *lmtp_set_r = settings_dup(&lmtp_setting_parser_info, sets[3], pool);
 }
index 47c8ce43331c58637ce7cb5a6aaf3b3bb823fe02..4f806969781e48190374227bbd93d60eee257adb 100644 (file)
@@ -13,6 +13,7 @@
 #include "master-interface.h"
 #include "mail-deliver.h"
 #include "mail-storage-service.h"
+#include "smtp-submit-settings.h"
 #include "lda-settings.h"
 #include "lmtp-settings.h"
 #include "client.h"
@@ -85,6 +86,7 @@ static void main_deinit(void)
 int main(int argc, char *argv[])
 {
        const struct setting_parser_info *set_roots[] = {
+               &smtp_submit_setting_parser_info,
                &lda_setting_parser_info,
                &lmtp_setting_parser_info,
                NULL