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;
 }
-