changeset 3287:47437871d879 HEAD

Send all unrecognized parameters from userdb to imap/pop3 processes. Useful for passing plugin parameters.
author Timo Sirainen <tss@iki.fi>
date Tue, 12 Apr 2005 11:37:26 +0300
parents def87e4ad3a5
children 1fae8494f8f7
files src/master/mail-process.c
diffstat 1 files changed, 23 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/master/mail-process.c	Mon Apr 11 22:17:19 2005 +0300
+++ b/src/master/mail-process.c	Tue Apr 12 11:37:26 2005 +0300
@@ -310,7 +310,9 @@
 	pid_t pid;
 	uid_t uid;
 	gid_t gid;
-	int i, err, ret, log_fd, nice;
+	array_t ARRAY_DEFINE(extra_args, const char *);
+	unsigned int i, count;
+	int err, ret, log_fd, nice;
 
 	// FIXME: per-group
 	if (mail_process_count == set->max_mail_processes) {
@@ -318,6 +320,7 @@
 		return FALSE;
 	}
 
+	ARRAY_CREATE(&extra_args, pool_datastack_create(), const char *, 16);
 	mail = home_dir = chroot_dir = system_user = "";
 	uid = gid = 0; nice = 0;
 	for (; *args != NULL; args++) {
@@ -340,6 +343,10 @@
 			uid = (uid_t)strtoul(*args + 4, NULL, 10);
 		} else if (strncmp(*args, "gid=", 4) == 0)
 			gid = (gid_t)strtoul(*args + 4, NULL, 10);
+		else {
+			const char *arg = *args;
+			array_append(&extra_args, &arg, 1);
+		}
 	}
 
 	if (*chroot_dir == '\0' && (p = strstr(home_dir, "/./")) != NULL) {
@@ -459,6 +466,21 @@
 
         mail_process_set_environment(set, mail, var_expand_table);
 
+	/* add extra args. uppercase key value. */
+	args = array_get(&extra_args, &count);
+	for (i = 0; i < count; i++) {
+		p = strchr(args[i], '=');
+		if (p == NULL) {
+			/* boolean */
+			env_put(t_strconcat(t_str_ucase(args[i]), "=1", NULL));
+
+		} else {
+			/* key=value */
+			env_put(t_strconcat(t_str_ucase(
+				t_strdup_until(args[i], p)), p, NULL));
+		}
+	}
+
 	env_put("LOGGED_IN=1");
 	env_put(t_strconcat("HOME=", home_dir, NULL));
 	env_put(t_strconcat("USER=", user, NULL));