From: Timo Sirainen Date: Mon, 18 Nov 2013 14:18:53 +0000 (+0200) Subject: doveadm auth/user: Fixes to auth_socket_path handling. X-Git-Tag: 2.2.8~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4a0d2f71a13f1f7be1a861a410d6961bc798579e;p=thirdparty%2Fdovecot%2Fcore.git 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. --- diff --git a/src/doveadm/doveadm-auth.c b/src/doveadm/doveadm-auth.c index ad2f2f09c5..5a7c14c818 100644 --- a/src/doveadm/doveadm-auth.c +++ b/src/doveadm/doveadm-auth.c @@ -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 @@ struct authtest_input { 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 @@ cmd_user_input(const char *auth_socket_path, const struct authtest_input *input, } } } - auth_master_deinit(&conn); return ret; } @@ -191,23 +196,17 @@ static void auth_user_info_parse(struct auth_user_info *info, const char *arg) } 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 @@ cmd_user_list(const char *auth_socket_path, const struct authtest_input *input, } 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 @@ static void cmd_auth_cache_flush(int argc, char *argv[]) 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 @@ static void cmd_auth_cache_flush(int argc, char *argv[]) } 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_test(int argc, char *argv[]) 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 @@ static void cmd_auth_lookup(int argc, char *argv[]) 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 @@ static void cmd_auth_lookup(int argc, char *argv[]) break; } } + auth_master_deinit(&conn); } static void cmd_user_mail_input_field(const char *key, const char *value, @@ -425,7 +426,8 @@ static int cmd_user_mail_input(struct mail_storage_service_ctx *storage_service, 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 @@ static void cmd_user(int argc, char *argv[]) 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 @@ static void cmd_user(int argc, char *argv[]) } 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 @@ static void cmd_user(int argc, char *argv[]) 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 @@ static void cmd_user(int argc, char *argv[]) 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 @@ static void cmd_user(int argc, char *argv[]) } if (storage_service != NULL) mail_storage_service_deinit(&storage_service); + if (conn != NULL) + auth_master_deinit(&conn); } struct doveadm_cmd doveadm_cmd_auth[] = { diff --git a/src/doveadm/doveadm-settings.c b/src/doveadm/doveadm-settings.c index d40cda1002..643be06d66 100644 --- a/src/doveadm/doveadm-settings.c +++ b/src/doveadm/doveadm-settings.c @@ -56,6 +56,7 @@ static const struct setting_define doveadm_setting_defines[] = { 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 @@ const struct doveadm_settings doveadm_default_settings = { .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 @@ static bool doveadm_settings_check(void *_set, pool_t pool ATTR_UNUSED, 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 --git a/src/doveadm/doveadm-settings.h b/src/doveadm/doveadm-settings.h index 1eb99f5159..7018aaeb32 100644 --- a/src/doveadm/doveadm-settings.h +++ b/src/doveadm/doveadm-settings.h @@ -6,6 +6,7 @@ struct doveadm_settings { 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;