From: Stephan Bosch Date: Tue, 22 Mar 2016 00:16:26 +0000 (+0100) Subject: imap: Made LDA settings accessible from plugins. X-Git-Tag: 2.2.24~136 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c15e8f33c;p=thirdparty%2Fdovecot%2Fcore.git imap: Made LDA settings accessible from plugins. This way, plugins can also send mail. --- diff --git a/src/imap/Makefile.am b/src/imap/Makefile.am index d82dba9692..2ffb6061a2 100644 --- a/src/imap/Makefile.am +++ b/src/imap/Makefile.am @@ -8,6 +8,7 @@ AM_CPPFLAGS = \ -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_LDFLAGS = -export-dynamic 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) diff --git a/src/imap/imap-client.c b/src/imap/imap-client.c index a7156789c1..4144f33bbd 100644 --- a/src/imap/imap-client.c +++ b/src/imap/imap-client.c @@ -79,7 +79,8 @@ static bool user_has_special_use_mailboxes(struct mail_user *user) 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 @@ struct client *client_create(int fd_in, int fd_out, const char *session_id, 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; diff --git a/src/imap/imap-client.h b/src/imap/imap-client.h index 36271de26b..82f2a3987b 100644 --- a/src/imap/imap-client.h +++ b/src/imap/imap-client.h @@ -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 @@ struct client { 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 @@ extern unsigned int imap_client_count; 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 */ diff --git a/src/imap/main.c b/src/imap/main.c index 90bfdc0ce3..fe18e4a99c 100644 --- a/src/imap/main.c +++ b/src/imap/main.c @@ -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 @@ int client_create_from_input(const struct mail_storage_service_input *input, 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 @@ int client_create_from_input(const struct mail_storage_service_input *input, 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 @@ int main(int argc, char *argv[]) { static const struct setting_parser_info *set_roots[] = { &imap_setting_parser_info, + &lda_setting_parser_info, NULL }; struct master_login_settings login_set;