dovecot-2.2: doveadm auth/user: Fixes to auth_socket_path handling.

dovecot at dovecot.org dovecot at dovecot.org
Mon Nov 18 16:19:14 EET 2013


details:   http://hg.dovecot.org/dovecot-2.2/rev/c41700c4a9bb
changeset: 16981:c41700c4a9bb
user:      Timo Sirainen <tss at iki.fi>
date:      Mon Nov 18 16:18:53 2013 +0200
description:
doveadm auth/user: Fixes to auth_socket_path handling.
doveadm user (without -u parameter) was ignoring "-a" parameter entirely.
Others weren't using auth_socket_path setting.

diffstat:

 src/doveadm/doveadm-auth.c     |  67 +++++++++++++++++++++++------------------
 src/doveadm/doveadm-settings.c |   3 +
 src/doveadm/doveadm-settings.h |   1 +
 3 files changed, 42 insertions(+), 29 deletions(-)

diffs (252 lines):

diff -r c6f1909e52af -r c41700c4a9bb src/doveadm/doveadm-auth.c
--- a/src/doveadm/doveadm-auth.c	Mon Nov 18 16:15:38 2013 +0200
+++ b/src/doveadm/doveadm-auth.c	Mon Nov 18 16:18:53 2013 +0200
@@ -7,7 +7,9 @@
 #include "base64.h"
 #include "str.h"
 #include "wildcard-match.h"
+#include "settings-parser.h"
 #include "master-service.h"
+#include "master-service-settings.h"
 #include "auth-client.h"
 #include "auth-master.h"
 #include "auth-server-connection.h"
@@ -29,24 +31,28 @@
 
 static void auth_cmd_help(doveadm_command_t *cmd);
 
+static struct auth_master_connection *
+doveadm_get_auth_master_conn(const char *auth_socket_path)
+{
+	enum auth_master_flags flags = 0;
+
+	if (doveadm_debug)
+		flags |= AUTH_MASTER_FLAG_DEBUG;
+	return auth_master_init(auth_socket_path, flags);
+}
+
 static int
-cmd_user_input(const char *auth_socket_path, const struct authtest_input *input,
+cmd_user_input(struct auth_master_connection *conn,
+	       const struct authtest_input *input,
 	       const char *show_field, bool userdb)
 {
 	const char *lookup_name = userdb ? "userdb lookup" : "passdb lookup";
-	struct auth_master_connection *conn;
 	pool_t pool;
 	const char *username, *const *fields, *p;
 	int ret;
 
-	if (auth_socket_path == NULL) {
-		auth_socket_path = t_strconcat(doveadm_settings->base_dir,
-					       "/auth-userdb", NULL);
-	}
-
 	pool = pool_alloconly_create("auth master lookup", 1024);
 
-	conn = auth_master_init(auth_socket_path, 0);
 	if (userdb) {
 		ret = auth_master_user_lookup(conn, input->username, &input->info,
 					      pool, &username, &fields);
@@ -86,7 +92,6 @@
 			}
 		}
 	}
-	auth_master_deinit(&conn);
 	return ret;
 }
 
@@ -191,23 +196,17 @@
 }
 
 static void
-cmd_user_list(const char *auth_socket_path, const struct authtest_input *input,
+cmd_user_list(struct auth_master_connection *conn,
+	      const struct authtest_input *input,
 	      char *const *users)
 {
 	struct auth_master_user_list_ctx *ctx;
-	struct auth_master_connection *conn;
 	const char *username, *user_mask = NULL;
 	unsigned int i;
 
-	if (auth_socket_path == NULL) {
-		auth_socket_path = t_strconcat(doveadm_settings->base_dir,
-					       "/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, user_mask, &input->info);
 	while ((username = auth_master_user_list_next(ctx)) != NULL) {
 		for (i = 0; users[i] != NULL; i++) {
@@ -219,12 +218,11 @@
 	}
 	if (auth_master_user_list_deinit(&ctx) < 0)
 		i_fatal("user listing failed");
-	auth_master_deinit(&conn);
 }
 
 static void cmd_auth_cache_flush(int argc, char *argv[])
 {
-	const char *auth_socket_path = NULL;
+	const char *master_socket_path = NULL;
 	struct auth_master_connection *conn;
 	unsigned int count;
 	int c;
@@ -232,7 +230,7 @@
 	while ((c = getopt(argc, argv, "a:")) > 0) {
 		switch (c) {
 		case 'a':
-			auth_socket_path = optarg;
+			master_socket_path = optarg;
 			break;
 		default:
 			auth_cmd_help(cmd_auth_cache_flush);
@@ -240,12 +238,12 @@
 	}
 	argv += optind;
 
-	if (auth_socket_path == NULL) {
-		auth_socket_path = t_strconcat(doveadm_settings->base_dir,
-					       "/auth-master", NULL);
+	if (master_socket_path == NULL) {
+		master_socket_path = t_strconcat(doveadm_settings->base_dir,
+						 "auth-master", NULL);
 	}
 
-	conn = auth_master_init(auth_socket_path, 0);
+	conn = doveadm_get_auth_master_conn(master_socket_path);
 	if (auth_master_cache_flush(conn, (void *)argv, &count) < 0) {
 		i_error("Cache flush failed");
 		doveadm_exit_code = EX_TEMPFAIL;
@@ -292,7 +290,8 @@
 
 static void cmd_auth_lookup(int argc, char *argv[])
 {
-	const char *auth_socket_path = NULL;
+	const char *auth_socket_path = doveadm_settings->auth_socket_path;
+	struct auth_master_connection *conn;
 	struct authtest_input input;
 	const char *show_field = NULL;
 	bool first = TRUE;
@@ -320,13 +319,14 @@
 	if (optind == argc)
 		auth_cmd_help(cmd_auth_lookup);
 
+	conn = doveadm_get_auth_master_conn(auth_socket_path);
 	while ((input.username = argv[optind++]) != NULL) {
 		if (first)
 			first = FALSE;
 		else
 			putchar('\n');
 
-		ret = cmd_user_input(auth_socket_path, &input, show_field, FALSE);
+		ret = cmd_user_input(conn, &input, show_field, FALSE);
 		switch (ret) {
 		case -1:
 			doveadm_exit_code = EX_TEMPFAIL;
@@ -336,6 +336,7 @@
 			break;
 		}
 	}
+	auth_master_deinit(&conn);
 }
 
 static void cmd_user_mail_input_field(const char *key, const char *value,
@@ -425,7 +426,8 @@
 
 static void cmd_user(int argc, char *argv[])
 {
-	const char *auth_socket_path = NULL;
+	const char *auth_socket_path = doveadm_settings->auth_socket_path;
+	struct auth_master_connection *conn;
 	struct authtest_input input;
 	const char *show_field = NULL;
 	struct mail_storage_service_ctx *storage_service = NULL;
@@ -458,6 +460,8 @@
 	if (optind == argc)
 		auth_cmd_help(cmd_user);
 
+	conn = doveadm_get_auth_master_conn(auth_socket_path);
+
 	have_wildcards = FALSE;
 	for (i = optind; argv[i] != NULL; i++) {
 		if (strchr(argv[i], '*') != NULL ||
@@ -468,7 +472,8 @@
 	}
 
 	if (have_wildcards) {
-		cmd_user_list(auth_socket_path, &input, argv + optind);
+		cmd_user_list(conn, &input, argv + optind);
+		auth_master_deinit(&conn);
 		return;
 	}
 
@@ -480,6 +485,8 @@
 			MAIL_STORAGE_SERVICE_FLAG_NO_PLUGINS |
 			MAIL_STORAGE_SERVICE_FLAG_NO_NAMESPACES |
 			MAIL_STORAGE_SERVICE_FLAG_TEMP_PRIV_DROP);
+		mail_storage_service_set_auth_conn(storage_service, conn);
+		conn = NULL;
 	}
 
 	while ((input.username = argv[optind++]) != NULL) {
@@ -490,7 +497,7 @@
 
 		ret = !userdb_only ?
 			cmd_user_mail_input(storage_service, &input, show_field) :
-			cmd_user_input(auth_socket_path, &input, show_field, TRUE);
+			cmd_user_input(conn, &input, show_field, TRUE);
 		switch (ret) {
 		case -1:
 			doveadm_exit_code = EX_TEMPFAIL;
@@ -502,6 +509,8 @@
 	}
 	if (storage_service != NULL)
 		mail_storage_service_deinit(&storage_service);
+	if (conn != NULL)
+		auth_master_deinit(&conn);
 }
 
 struct doveadm_cmd doveadm_cmd_auth[] = {
diff -r c6f1909e52af -r c41700c4a9bb src/doveadm/doveadm-settings.c
--- a/src/doveadm/doveadm-settings.c	Mon Nov 18 16:15:38 2013 +0200
+++ b/src/doveadm/doveadm-settings.c	Mon Nov 18 16:18:53 2013 +0200
@@ -56,6 +56,7 @@
 	DEF(SET_STR, libexec_dir),
 	DEF(SET_STR, mail_plugins),
 	DEF(SET_STR, mail_plugin_dir),
+	DEF(SET_STR, auth_socket_path),
 	DEF(SET_STR, doveadm_socket_path),
 	DEF(SET_UINT, doveadm_worker_count),
 	DEF(SET_UINT, doveadm_port),
@@ -77,6 +78,7 @@
 	.libexec_dir = PKG_LIBEXECDIR,
 	.mail_plugins = "",
 	.mail_plugin_dir = MODULEDIR,
+	.auth_socket_path = "auth-userdb",
 	.doveadm_socket_path = "doveadm-server",
 	.doveadm_worker_count = 0,
 	.doveadm_port = 0,
@@ -125,6 +127,7 @@
 	struct doveadm_settings *set = _set;
 
 #ifndef CONFIG_BINARY
+	fix_base_path(set, pool, &set->auth_socket_path);
 	fix_base_path(set, pool, &set->doveadm_socket_path);
 #endif
 	if (*set->dsync_alt_char == '\0') {
diff -r c6f1909e52af -r c41700c4a9bb src/doveadm/doveadm-settings.h
--- a/src/doveadm/doveadm-settings.h	Mon Nov 18 16:15:38 2013 +0200
+++ b/src/doveadm/doveadm-settings.h	Mon Nov 18 16:18:53 2013 +0200
@@ -6,6 +6,7 @@
 	const char *libexec_dir;
 	const char *mail_plugins;
 	const char *mail_plugin_dir;
+	const char *auth_socket_path;
 	const char *doveadm_socket_path;
 	unsigned int doveadm_worker_count;
 	unsigned int doveadm_port;


More information about the dovecot-cvs mailing list