[dovecot-cvs] dovecot/src/master dict-process.c, 1.6,
1.7 mail-process.c, 1.82, 1.83 master-settings.c, 1.109,
1.110 master-settings.h, 1.72, 1.73
cras at dovecot.org
cras at dovecot.org
Thu Feb 2 23:29:18 EET 2006
Update of /var/lib/cvs/dovecot/src/master
In directory talvi:/tmp/cvs-serv32086/src/master
Modified Files:
dict-process.c mail-process.c master-settings.c
master-settings.h
Log Message:
Added plugin {} section to dovecot.conf for passing extra environment
variables to mail processes.
Index: dict-process.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/master/dict-process.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- dict-process.c 29 Jan 2006 12:14:49 -0000 1.6
+++ dict-process.c 2 Feb 2006 21:29:15 -0000 1.7
@@ -150,9 +150,8 @@
process = i_new(struct dict_process, 1);
process->fd = -1;
process->path = i_strconcat(settings_root->defaults->base_dir,
- DICT_SERVER_SOCKET_NAME, NULL);
- /* FIXME: disabled, until it works right */
- /*(void)dict_process_listen(process);*/
+ "/"DICT_SERVER_SOCKET_NAME, NULL);
+ (void)dict_process_listen(process);
}
void dict_process_deinit(void)
Index: mail-process.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/master/mail-process.c,v
retrieving revision 1.82
retrieving revision 1.83
diff -u -d -r1.82 -r1.83
--- mail-process.c 18 Jan 2006 23:14:45 -0000 1.82
+++ mail-process.c 2 Feb 2006 21:29:15 -0000 1.83
@@ -191,6 +191,10 @@
mail_process_set_environment(struct settings *set, const char *mail,
const struct var_expand_table *var_expand_table)
{
+ const char *const *envs;
+ string_t *str;
+ unsigned int i, count;
+
env_put(t_strconcat("MAIL_CACHE_FIELDS=",
set->mail_cache_fields, NULL));
env_put(t_strconcat("MAIL_NEVER_CACHE_FIELDS=",
@@ -271,6 +275,17 @@
env_put_namespace(set->server->namespaces,
mail, var_expand_table);
}
+
+ str = t_str_new(256);
+ envs = array_get(&set->plugin_envs, &count);
+ i_assert((count % 2) == 0);
+ for (i = 0; i < count; i += 2) {
+ str_truncate(str, 0);
+ var_expand(str, envs[i+1], var_expand_table);
+
+ env_put(t_strconcat(t_str_ucase(envs[i]), "=",
+ str_c(str), NULL));
+ }
}
void mail_process_exec(const char *protocol, const char *section)
Index: master-settings.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/master/master-settings.c,v
retrieving revision 1.109
retrieving revision 1.110
diff -u -d -r1.109 -r1.110
--- master-settings.c 22 Jan 2006 12:13:49 -0000 1.109
+++ master-settings.c 2 Feb 2006 21:29:15 -0000 1.110
@@ -1,6 +1,7 @@
/* Copyright (C) 2002 Timo Sirainen */
#include "common.h"
+#include "array.h"
#include "str.h"
#include "istream.h"
#include "safe-mkdir.h"
@@ -25,7 +26,8 @@
SETTINGS_TYPE_AUTH_PASSDB,
SETTINGS_TYPE_AUTH_USERDB,
SETTINGS_TYPE_NAMESPACE,
- SETTINGS_TYPE_SOCKET
+ SETTINGS_TYPE_SOCKET,
+ SETTINGS_TYPE_PLUGIN
};
struct settings_parse_ctx {
@@ -934,6 +936,23 @@
return parse_setting_from_defs(settings_pool,
socket_setting_defs,
ctx->socket, key, value);
+ case SETTINGS_TYPE_PLUGIN:
+ key = p_strdup(settings_pool, key);
+ value = p_strdup(settings_pool, value);
+
+ if (ctx->protocol == MAIL_PROTOCOL_ANY ||
+ ctx->protocol == MAIL_PROTOCOL_IMAP) {
+ array_append(&ctx->server->imap->plugin_envs, &key, 1);
+ array_append(&ctx->server->imap->plugin_envs,
+ &value, 1);
+ }
+ if (ctx->protocol == MAIL_PROTOCOL_ANY ||
+ ctx->protocol == MAIL_PROTOCOL_POP3) {
+ array_append(&ctx->server->pop3->plugin_envs, &key, 1);
+ array_append(&ctx->server->pop3->plugin_envs,
+ &value, 1);
+ }
+ return NULL;
}
i_unreached();
@@ -955,6 +974,11 @@
*server->imap = *imap_defaults;
*server->pop3 = *pop3_defaults;
+ ARRAY_CREATE(&server->imap->plugin_envs, settings_pool,
+ const char *, 8);
+ ARRAY_CREATE(&server->pop3->plugin_envs, settings_pool,
+ const char *, 8);
+
server->imap->server = server;
server->imap->protocol = MAIL_PROTOCOL_IMAP;
server->imap->login_executable = PKG_LIBEXECDIR"/imap-login";
@@ -1098,6 +1122,17 @@
return ctx->namespace != NULL;
}
+ if (strcmp(type, "plugin") == 0) {
+ if (ctx->type != SETTINGS_TYPE_ROOT &&
+ ctx->type != SETTINGS_TYPE_SERVER) {
+ *errormsg = "Plugin section not allowed here";
+ return FALSE;
+ }
+
+ ctx->type = SETTINGS_TYPE_PLUGIN;
+ return TRUE;
+ }
+
*errormsg = "Unknown section type";
return FALSE;
}
Index: master-settings.h
===================================================================
RCS file: /var/lib/cvs/dovecot/src/master/master-settings.h,v
retrieving revision 1.72
retrieving revision 1.73
diff -u -d -r1.72 -r1.73
--- master-settings.h 22 Jan 2006 11:33:30 -0000 1.72
+++ master-settings.h 2 Feb 2006 21:29:15 -0000 1.73
@@ -118,6 +118,8 @@
int listen_fd, ssl_listen_fd;
struct ip_addr listen_ip, ssl_listen_ip;
unsigned int listen_port, ssl_listen_port;
+
+ array_t ARRAY_DEFINE(plugin_envs, const char *);
};
struct socket_settings {
More information about the dovecot-cvs
mailing list