[dovecot-cvs] dovecot/src/master mail-process.c,1.72,1.73

cras at dovecot.org cras at dovecot.org
Tue Apr 12 11:37:29 EEST 2005


Update of /var/lib/cvs/dovecot/src/master
In directory talvi:/tmp/cvs-serv4748

Modified Files:
	mail-process.c 
Log Message:
Send all unrecognized parameters from userdb to imap/pop3 processes. Useful
for passing plugin parameters.



Index: mail-process.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/master/mail-process.c,v
retrieving revision 1.72
retrieving revision 1.73
diff -u -d -r1.72 -r1.73
--- mail-process.c	12 Feb 2005 14:05:41 -0000	1.72
+++ mail-process.c	12 Apr 2005 08:37:26 -0000	1.73
@@ -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));



More information about the dovecot-cvs mailing list