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)
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);
-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 \
#include "mail-deliver.h"
#include "mail-send.h"
#include "mbox-from.h"
+#include "smtp-submit-settings.h"
#include "lda-settings.h"
#include <stdio.h>
int main(int argc, char *argv[])
{
const struct setting_parser_info *set_roots[] = {
+ &smtp_submit_setting_parser_info,
&lda_setting_parser_info,
NULL
};
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;
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",
#include "hostpid.h"
#include "settings-parser.h"
#include "mail-storage-settings.h"
+#include "smtp-submit-settings.h"
#include "lda-settings.h"
#include <stddef.h>
static const struct setting_parser_info *lda_setting_dependencies[] = {
&mail_user_setting_parser_info,
+ &smtp_submit_setting_parser_info,
NULL
};
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;
#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"
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);
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;
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);
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:
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);
}
#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"
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