[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