# HG changeset patch # User Timo Sirainen # Date 1140442777 -7200 # Node ID 7140f09b464ff444ecc7118788d5c6ba618986c4 # Parent 357175e274b40c605a6cd9df0be9ba1dfb4d9500 Allow checkpassword program to send extra parameters to Dovecot. EXTRA environment contains a list of environment variables that are passed to Dovecot. diff -r 357175e274b4 -r 7140f09b464f src/auth/checkpassword-reply.c --- a/src/auth/checkpassword-reply.c Mon Feb 20 15:29:31 2006 +0200 +++ b/src/auth/checkpassword-reply.c Mon Feb 20 15:39:37 2006 +0200 @@ -10,6 +10,7 @@ int main(void) { string_t *str; + const char *extra_env, *value, *const *tmp; lib_init(); str = t_str_new(1024); @@ -30,6 +31,17 @@ getenv("USER"), getenv("HOME"), dec2str(getuid()), dec2str(getgid())); + extra_env = getenv("EXTRA"); + if (extra_env != NULL) { + for (tmp = t_strsplit(extra_env, " "); *tmp != NULL; tmp++) { + value = getenv(*tmp); + if (value != NULL) { + str_printfa(str, "%s=%s\t", + t_str_lcase(*tmp), value); + } + } + } + if (write_full(4, str_data(str), str_len(str)) < 0) { i_error("write_full() failed: %m"); exit(111); diff -r 357175e274b4 -r 7140f09b464f src/auth/passdb-checkpassword.c --- a/src/auth/passdb-checkpassword.c Mon Feb 20 15:29:31 2006 +0200 +++ b/src/auth/passdb-checkpassword.c Mon Feb 20 15:39:37 2006 +0200 @@ -67,6 +67,12 @@ hash_remove(module->clients, POINTER_CAST(request->pid)); + if (strchr(str_c(request->input_buf), '\n') != NULL) { + auth_request_log_error(request->request, "checkpassword", + "LF characters in checkpassword reply"); + result = PASSDB_RESULT_INTERNAL_FAILURE; + } + if (result == PASSDB_RESULT_OK) { request->request->extra_fields = auth_stream_reply_init(request->request);