changeset 19950:4ccd54122839

imap: Made LDA settings accessible from plugins. This way, plugins can also send mail.
author Stephan Bosch <stephan@rename-it.nl>
date Tue, 22 Mar 2016 01:16:26 +0100
parents 761f81b9a814
children a3560297529f
files src/imap/Makefile.am src/imap/imap-client.c src/imap/imap-client.h src/imap/main.c
diffstat 4 files changed, 23 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/src/imap/Makefile.am	Tue Mar 22 09:19:45 2016 +0200
+++ b/src/imap/Makefile.am	Tue Mar 22 01:16:26 2016 +0100
@@ -8,6 +8,7 @@
 	-I$(top_srcdir)/src/lib-dict \
 	-I$(top_srcdir)/src/lib-master \
 	-I$(top_srcdir)/src/lib-mail \
+	-I$(top_srcdir)/src/lib-lda \
 	-I$(top_srcdir)/src/lib-imap \
 	-I$(top_srcdir)/src/lib-imap-urlauth \
 	-I$(top_srcdir)/src/lib-imap-storage \
@@ -18,10 +19,12 @@
 
 imap_LDADD = \
 	../lib-imap-urlauth/libimap-urlauth.la \
+	$(LIBDOVECOT_LDA) \
 	$(LIBDOVECOT_STORAGE) \
 	$(LIBDOVECOT)
 imap_DEPENDENCIES = \
 	../lib-imap-urlauth/libimap-urlauth.la \
+	$(LIBDOVECOT_LDA) \
 	$(LIBDOVECOT_STORAGE_DEPS) \
 	$(LIBDOVECOT_DEPS)
 
--- a/src/imap/imap-client.c	Tue Mar 22 09:19:45 2016 +0200
+++ b/src/imap/imap-client.c	Tue Mar 22 01:16:26 2016 +0100
@@ -79,7 +79,8 @@
 struct client *client_create(int fd_in, int fd_out, const char *session_id,
 			     struct mail_user *user,
 			     struct mail_storage_service_user *service_user,
-			     const struct imap_settings *set)
+			     const struct imap_settings *set,
+			     const struct lda_settings *lda_set)
 {
 	const struct mail_storage_settings *mail_set;
 	struct client *client;
@@ -96,6 +97,7 @@
 	client->pool = pool;
 	client->v = imap_client_vfuncs;
 	client->set = set;
+	client->lda_set = lda_set;
 	client->service_user = service_user;
 	client->session_id = p_strdup(pool, session_id);
 	client->fd_in = fd_in;
--- a/src/imap/imap-client.h	Tue Mar 22 09:19:45 2016 +0200
+++ b/src/imap/imap-client.h	Tue Mar 22 01:16:26 2016 +0100
@@ -13,6 +13,7 @@
 struct client;
 struct mail_storage;
 struct mail_storage_service_ctx;
+struct lda_settings;
 struct imap_parser;
 struct imap_arg;
 struct imap_urlauth_context;
@@ -126,7 +127,8 @@
 
 	pool_t pool;
 	struct mail_storage_service_user *service_user;
-        const struct imap_settings *set;
+	const struct imap_settings *set;
+	const struct lda_settings *lda_set;
 	string_t *capability_string;
 
         struct mail_user *user;
@@ -216,7 +218,8 @@
 struct client *client_create(int fd_in, int fd_out, const char *session_id,
 			     struct mail_user *user,
 			     struct mail_storage_service_user *service_user,
-			     const struct imap_settings *set);
+			     const struct imap_settings *set,
+			     const struct lda_settings *lda_set);
 void client_destroy(struct client *client, const char *reason) ATTR_NULL(2);
 
 /* Disconnect client connection */
--- a/src/imap/main.c	Tue Mar 22 09:19:45 2016 +0200
+++ b/src/imap/main.c	Tue Mar 22 01:16:26 2016 +0100
@@ -17,6 +17,7 @@
 #include "master-login.h"
 #include "mail-user.h"
 #include "mail-storage-service.h"
+#include "lda-settings.h"
 #include "imap-master-client.h"
 #include "imap-resp-code.h"
 #include "imap-commands.h"
@@ -219,7 +220,8 @@
 	struct mail_user *mail_user;
 	struct mail_namespace *ns;
 	struct client *client;
-	struct imap_settings *set;
+	struct imap_settings *imap_set;
+	struct lda_settings *lda_set;
 	const char *errstr;
 	enum mail_error mail_error;
 
@@ -244,15 +246,18 @@
 		return -1;
 	}
 
-	set = mail_storage_service_user_get_set(user)[1];
-	if (set->verbose_proctitle)
+	imap_set = mail_storage_service_user_get_set(user)[1];
+	if (imap_set->verbose_proctitle)
 		verbose_proctitle = TRUE;
+	lda_set = mail_storage_service_user_get_set(user)[2];
 
-	settings_var_expand(&imap_setting_parser_info, set, mail_user->pool,
-			    mail_user_var_expand_table(mail_user));
+	settings_var_expand(&imap_setting_parser_info, imap_set,
+			    mail_user->pool, mail_user_var_expand_table(mail_user));
+	settings_var_expand(&lda_setting_parser_info, lda_set,
+			    mail_user->pool, mail_user_var_expand_table(mail_user));
 
 	client = client_create(fd_in, fd_out, input->session_id,
-			       mail_user, user, set);
+			       mail_user, user, imap_set, lda_set);
 	client->userdb_fields = input->userdb_fields == NULL ? NULL :
 		p_strarray_dup(client->pool, input->userdb_fields);
 	*client_r = client;
@@ -362,6 +367,7 @@
 {
 	static const struct setting_parser_info *set_roots[] = {
 		&imap_setting_parser_info,
+		&lda_setting_parser_info,
 		NULL
 	};
 	struct master_login_settings login_set;