dovecot-2.1: lib-auth: auth_master_user_list_init() now takes us...

dovecot at dovecot.org dovecot at dovecot.org
Wed Nov 23 22:08:22 EET 2011


details:   http://hg.dovecot.org/dovecot-2.1/rev/59e25ebc976f
changeset: 13761:59e25ebc976f
user:      Timo Sirainen <tss at iki.fi>
date:      Wed Nov 23 22:08:09 2011 +0200
description:
lib-auth: auth_master_user_list_init() now takes user_mask and info parameters.
These are passed to auth process, which may use them to limit what usernames
are returned.

diffstat:

 src/doveadm/doveadm-auth.c             |  12 ++++++++----
 src/doveadm/doveadm-director.c         |   2 +-
 src/lib-auth/auth-master.c             |  28 ++++++++++++++++++++--------
 src/lib-auth/auth-master.h             |   8 ++++++--
 src/lib-storage/mail-storage-service.c |   2 +-
 5 files changed, 36 insertions(+), 16 deletions(-)

diffs (152 lines):

diff -r acfe332f9aeb -r 59e25ebc976f src/doveadm/doveadm-auth.c
--- a/src/doveadm/doveadm-auth.c	Wed Nov 23 22:07:08 2011 +0200
+++ b/src/doveadm/doveadm-auth.c	Wed Nov 23 22:08:09 2011 +0200
@@ -180,11 +180,12 @@
 }
 
 static void
-cmd_user_list(const char *auth_socket_path, char *const *users)
+cmd_user_list(const char *auth_socket_path, const struct authtest_input *input,
+	      char *const *users)
 {
 	struct auth_master_user_list_ctx *ctx;
 	struct auth_master_connection *conn;
-	const char *username;
+	const char *username, *user_mask = NULL;
 	unsigned int i;
 
 	if (auth_socket_path == NULL) {
@@ -192,8 +193,11 @@
 					       "/auth-userdb", NULL);
 	}
 
+	if (users[0] != NULL && users[1] == NULL)
+		user_mask = users[0];
+
 	conn = auth_master_init(auth_socket_path, 0);
-	ctx = auth_master_user_list_init(conn);
+	ctx = auth_master_user_list_init(conn, user_mask, &input->info);
 	while ((username = auth_master_user_list_next(ctx)) != NULL) {
 		for (i = 0; users[i] != NULL; i++) {
 			if (wildcard_match_icase(username, users[i]))
@@ -286,7 +290,7 @@
 	}
 
 	if (have_wildcards)
-		cmd_user_list(auth_socket_path, argv + optind);
+		cmd_user_list(auth_socket_path, &input, argv + optind);
 	else {
 		bool first = TRUE;
 		bool notfound = FALSE;
diff -r acfe332f9aeb -r 59e25ebc976f src/doveadm/doveadm-director.c
--- a/src/doveadm/doveadm-director.c	Wed Nov 23 22:07:08 2011 +0200
+++ b/src/doveadm/doveadm-director.c	Wed Nov 23 22:08:09 2011 +0200
@@ -211,7 +211,7 @@
 	}
 
 	conn = auth_master_init(auth_socket_path, 0);
-	ctx = auth_master_user_list_init(conn);
+	ctx = auth_master_user_list_init(conn, NULL, NULL);
 	while ((username = auth_master_user_list_next(ctx)) != NULL)
 		user_list_add(username, pool, users);
 	if (auth_master_user_list_deinit(&ctx) < 0) {
diff -r acfe332f9aeb -r 59e25ebc976f src/lib-auth/auth-master.c
--- a/src/lib-auth/auth-master.c	Wed Nov 23 22:07:08 2011 +0200
+++ b/src/lib-auth/auth-master.c	Wed Nov 23 22:08:09 2011 +0200
@@ -434,8 +434,10 @@
 static void
 auth_user_info_export(string_t *str, const struct auth_user_info *info)
 {
-	str_append(str, "service=");
-	str_append(str, info->service);
+	if (info->service != NULL) {
+		str_append(str, "\tservice=");
+		str_append(str, info->service);
+	}
 
 	if (info->local_ip.family != 0)
 		str_printfa(str, "\tlip=%s", net_ip2addr(&info->local_ip));
@@ -473,7 +475,7 @@
 	conn->reply_context = &ctx;
 
 	str = t_str_new(128);
-	str_printfa(str, "USER\t%u\t%s\t",
+	str_printfa(str, "USER\t%u\t%s",
 		    auth_master_next_request_id(conn), user);
 	auth_user_info_export(str, info);
 	str_append_c(str, '\n');
@@ -547,7 +549,7 @@
 	conn->reply_context = &ctx;
 
 	str = t_str_new(128);
-	str_printfa(str, "PASS\t%u\t%s\t",
+	str_printfa(str, "PASS\t%u\t%s",
 		    auth_master_next_request_id(conn), user);
 	auth_user_info_export(str, info);
 	str_append_c(str, '\n');
@@ -591,10 +593,12 @@
 }
 
 struct auth_master_user_list_ctx *
-auth_master_user_list_init(struct auth_master_connection *conn)
+auth_master_user_list_init(struct auth_master_connection *conn,
+			   const char *user_mask,
+			   const struct auth_user_info *info)
 {
 	struct auth_master_user_list_ctx *ctx;
-	const char *str;
+	string_t *str;
 	pool_t pool;
 
 	pool = pool_alloconly_create("auth master user list", 10240);
@@ -606,9 +610,17 @@
 	conn->reply_callback = auth_user_list_reply_callback;
 	conn->reply_context = ctx;
 
-	str = t_strdup_printf("LIST\t%u\n", auth_master_next_request_id(conn));
+	str = t_str_new(128);
+	str_printfa(str, "LIST\t%u",
+		    auth_master_next_request_id(conn));
+	if (user_mask != NULL && *user_mask != '\0')
+		str_printfa(str, "\tuser=%s", user_mask);
+	if (info != NULL)
+		auth_user_info_export(str, info);
+	str_append_c(str, '\n');
+
 	conn->prefix = "userdb list";
-	if (auth_master_run_cmd(conn, str) < 0)
+	if (auth_master_run_cmd(conn, str_c(str)) < 0)
 		ctx->failed = TRUE;
 	ctx->user_strings = array_get(&ctx->users, &ctx->user_count);
 	conn->prefix = DEFAULT_USERDB_LOOKUP_PREFIX;
diff -r acfe332f9aeb -r 59e25ebc976f src/lib-auth/auth-master.h
--- a/src/lib-auth/auth-master.h	Wed Nov 23 22:07:08 2011 +0200
+++ b/src/lib-auth/auth-master.h	Wed Nov 23 22:08:09 2011 +0200
@@ -43,9 +43,13 @@
 void auth_user_fields_parse(const char *const *fields, pool_t pool,
 			    struct auth_user_reply *reply_r);
 
-/* Iterate through all users. */
+/* Iterate through all users. If user_mask is non-NULL, it contains a string
+   with wildcards ('*', '?') that the auth server MAY use to limit what users
+   are returned (but it may as well return all users anyway). */
 struct auth_master_user_list_ctx *
-auth_master_user_list_init(struct auth_master_connection *conn);
+auth_master_user_list_init(struct auth_master_connection *conn,
+			   const char *user_mask,
+			   const struct auth_user_info *info);
 const char *auth_master_user_list_next(struct auth_master_user_list_ctx *ctx);
 unsigned int auth_master_user_list_count(struct auth_master_user_list_ctx *ctx);
 /* Returns -1 if anything failed, 0 if ok */
diff -r acfe332f9aeb -r 59e25ebc976f src/lib-storage/mail-storage-service.c
--- a/src/lib-storage/mail-storage-service.c	Wed Nov 23 22:07:08 2011 +0200
+++ b/src/lib-storage/mail-storage-service.c	Wed Nov 23 22:08:09 2011 +0200
@@ -1119,7 +1119,7 @@
 		(void)auth_master_user_list_deinit(&ctx->auth_list);
 	mail_storage_service_init_settings(ctx, NULL);
 
-	ctx->auth_list = auth_master_user_list_init(ctx->conn);
+	ctx->auth_list = auth_master_user_list_init(ctx->conn, NULL, NULL);
 	return auth_master_user_list_count(ctx->auth_list);
 }
 


More information about the dovecot-cvs mailing list