Mercurial > dovecot > core-2.2
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));