]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
imap: Made LDA settings accessible from plugins.
authorStephan Bosch <stephan@rename-it.nl>
Tue, 22 Mar 2016 00:16:26 +0000 (01:16 +0100)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Wed, 23 Mar 2016 01:18:28 +0000 (10:18 +0900)
This way, plugins can also send mail.

src/imap/Makefile.am
src/imap/imap-client.c
src/imap/imap-client.h
src/imap/main.c

index d82dba9692d41f897fe43e126bc67741e63bb66a..2ffb6061a2677209290600fcd4b25edbda4954a2 100644 (file)
@@ -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)
 
index a7156789c10457fcc0158459063c95d16bd6bcde..4144f33bbd407149fe8f3cb081e72d34e3d14c4f 100644 (file)
@@ -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;
index 36271de26b57a87e8eb7b8b44c394ab8a686f0ae..82f2a3987b33d7fa6237e16648f940a63f7928da 100644 (file)
@@ -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 */
index 90bfdc0ce3cfb2e1f386f83e5f209b64ea277f25..fe18e4a99cdaaaa650b782837bcaabfbfe3c6510 100644 (file)
@@ -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;