Mercurial > dovecot > original-hg > dovecot-1.2
diff src/deliver/auth-client.c @ 6317:3cee177eced6 HEAD
Extra fields from userdb lookup should override everything. Fixed the code
to work the same way as master process handles it, so there should be no
more differences.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Fri, 24 Aug 2007 21:43:27 +0300 |
parents | 896cc473c1f0 |
children | 6bd13d514294 |
line wrap: on
line diff
--- a/src/deliver/auth-client.c Fri Aug 24 21:23:00 2007 +0300 +++ b/src/deliver/auth-client.c Fri Aug 24 21:43:27 2007 +0300 @@ -1,6 +1,7 @@ /* Copyright (C) 2005-2006 Timo Sirainen */ #include "lib.h" +#include "array.h" #include "ioloop.h" #include "network.h" #include "istream.h" @@ -29,6 +30,7 @@ struct ioloop *ioloop; uid_t euid; const char *user; + ARRAY_TYPE(string) *extra_fields; unsigned int handshaked:1; }; @@ -49,10 +51,9 @@ static void auth_parse_input(struct auth_connection *conn, const char *args) { - const char *const *tmp, *key, *value; + const char *const *tmp; uid_t uid = 0; gid_t gid = 0; - int home_found = FALSE; const char *chroot = getenv("MAIL_CHROOT"); bool debug = getenv("DEBUG") != NULL; @@ -87,14 +88,9 @@ } } else if (strncmp(*tmp, "chroot=", 7) == 0) { chroot = *tmp + 7; - } else if (strncmp(*tmp, "home=", 5) == 0) { - home_found = TRUE; - env_put(t_strconcat("HOME=", *tmp + 5, NULL)); } else { - key = t_str_ucase(t_strcut(*tmp, '=')); - value = strchr(*tmp, '='); - if (value != NULL) - env_put(t_strconcat(key, "=", value+1, NULL)); + char *field = i_strdup(*tmp); + array_append(conn->extra_fields, &field, 1); } } @@ -194,8 +190,10 @@ auth_connection_destroy(conn); } -int auth_client_put_user_env(struct ioloop *ioloop, const char *auth_socket, - const char *user, uid_t euid) +int auth_client_lookup_and_restrict(struct ioloop *ioloop, + const char *auth_socket, + const char *user, uid_t euid, + ARRAY_TYPE(string) *extra_fields_r) { struct auth_connection *conn; @@ -208,6 +206,7 @@ conn->user = user; conn->to = timeout_add(1000*AUTH_REQUEST_TIMEOUT, auth_client_timeout, conn); + conn->extra_fields = extra_fields_r; o_stream_send_str(conn->output, t_strconcat("VERSION\t1\t0\n" @@ -218,4 +217,3 @@ io_loop_run(ioloop); return return_value; } -