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