dovecot-2.2: doveadm: Added "auth lookup" command to do a passdb...
dovecot at dovecot.org
dovecot at dovecot.org
Thu Sep 19 22:44:28 EEST 2013
details: http://hg.dovecot.org/dovecot-2.2/rev/5a334879572b
changeset: 16771:5a334879572b
user: Timo Sirainen <tss at iki.fi>
date: Thu Sep 19 22:44:20 2013 +0300
description:
doveadm: Added "auth lookup" command to do a passdb lookup.
diffstat:
src/doveadm/doveadm-auth.c | 72 ++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 64 insertions(+), 8 deletions(-)
diffs (125 lines):
diff -r ed1f5b4f38be -r 5a334879572b src/doveadm/doveadm-auth.c
--- a/src/doveadm/doveadm-auth.c Thu Sep 19 22:43:45 2013 +0300
+++ b/src/doveadm/doveadm-auth.c Thu Sep 19 22:44:20 2013 +0300
@@ -31,8 +31,9 @@
static int
cmd_user_input(const char *auth_socket_path, const struct authtest_input *input,
- const char *show_field)
+ 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;
@@ -46,18 +47,23 @@
pool = pool_alloconly_create("auth master lookup", 1024);
conn = auth_master_init(auth_socket_path, 0);
- ret = auth_master_user_lookup(conn, input->username, &input->info,
- pool, &username, &fields);
+ if (userdb) {
+ ret = auth_master_user_lookup(conn, input->username, &input->info,
+ pool, &username, &fields);
+ } else {
+ ret = auth_master_pass_lookup(conn, input->username, &input->info,
+ pool, &fields);
+ }
if (ret < 0) {
if (fields[0] == NULL)
- i_error("userdb lookup failed for %s", input->username);
+ i_error("%s failed for %s", lookup_name, input->username);
else {
- i_error("userdb lookup failed for %s: %s",
+ i_error("%s failed for %s: %s", lookup_name,
input->username, fields[0]);
}
} else if (ret == 0) {
fprintf(show_field == NULL ? stdout : stderr,
- "userdb lookup: user %s doesn't exist\n",
+ "%s: user %s doesn't exist\n", lookup_name,
input->username);
} else if (show_field != NULL) {
unsigned int show_field_len = strlen(show_field);
@@ -68,7 +74,7 @@
printf("%s\n", *fields + show_field_len + 1);
}
} else {
- printf("userdb: %s\n", input->username);
+ printf("%s: %s\n", userdb ? "userdb" : "passdb", input->username);
for (; *fields; fields++) {
p = strchr(*fields, '=');
@@ -284,6 +290,54 @@
doveadm_exit_code = EX_NOPERM;
}
+static void cmd_auth_lookup(int argc, char *argv[])
+{
+ const char *auth_socket_path = NULL;
+ struct authtest_input input;
+ const char *show_field = NULL;
+ bool first = TRUE;
+ int c, ret;
+
+ memset(&input, 0, sizeof(input));
+ input.info.service = "doveadm";
+
+ while ((c = getopt(argc, argv, "a:f:x:")) > 0) {
+ switch (c) {
+ case 'a':
+ auth_socket_path = optarg;
+ break;
+ case 'f':
+ show_field = optarg;
+ break;
+ case 'x':
+ auth_user_info_parse(&input.info, optarg);
+ break;
+ default:
+ auth_cmd_help(cmd_auth_lookup);
+ }
+ }
+
+ if (optind == argc)
+ auth_cmd_help(cmd_auth_lookup);
+
+ while ((input.username = argv[optind++]) != NULL) {
+ if (first)
+ first = FALSE;
+ else
+ putchar('\n');
+
+ ret = cmd_user_input(auth_socket_path, &input, show_field, FALSE);
+ switch (ret) {
+ case -1:
+ doveadm_exit_code = EX_TEMPFAIL;
+ break;
+ case 0:
+ doveadm_exit_code = EX_NOUSER;
+ break;
+ }
+ }
+}
+
static void cmd_user_mail_input_field(const char *key, const char *value,
const char *show_field)
{
@@ -435,7 +489,7 @@
ret = !userdb_only ?
cmd_user_mail_input(storage_service, &input, show_field) :
- cmd_user_input(auth_socket_path, &input, show_field);
+ cmd_user_input(auth_socket_path, &input, show_field, TRUE);
switch (ret) {
case -1:
doveadm_exit_code = EX_TEMPFAIL;
@@ -452,6 +506,8 @@
struct doveadm_cmd doveadm_cmd_auth[] = {
{ cmd_auth_test, "auth test",
"[-a <auth socket path>] [-x <auth info>] <user> [<password>]" },
+ { cmd_auth_lookup, "auth lookup",
+ "[-a <userdb socket path>] [-x <auth info>] [-f field] <user> [...]" },
{ cmd_auth_cache_flush, "auth cache flush",
"[-a <master socket path>] [<user> [...]]" },
{ cmd_user, "user",
More information about the dovecot-cvs
mailing list