dovecot-2.1: doveadm user: Added -m parameter to show some of th...

dovecot at dovecot.org dovecot at dovecot.org
Wed Apr 4 07:26:57 EEST 2012


details:   http://hg.dovecot.org/dovecot-2.1/rev/601014feade4
changeset: 14385:601014feade4
user:      Timo Sirainen <tss at iki.fi>
date:      Wed Apr 04 07:26:37 2012 +0300
description:
doveadm user: Added -m parameter to show some of the mail settings.

diffstat:

 src/doveadm/doveadm-auth.c |  114 ++++++++++++++++++++++++++++++++++++--------
 1 files changed, 93 insertions(+), 21 deletions(-)

diffs (168 lines):

diff -r 8b91367bc3e1 -r 601014feade4 src/doveadm/doveadm-auth.c
--- a/src/doveadm/doveadm-auth.c	Wed Apr 04 06:25:00 2012 +0300
+++ b/src/doveadm/doveadm-auth.c	Wed Apr 04 07:26:37 2012 +0300
@@ -7,10 +7,14 @@
 #include "base64.h"
 #include "str.h"
 #include "wildcard-match.h"
+#include "master-service.h"
 #include "auth-client.h"
 #include "auth-master.h"
 #include "auth-server-connection.h"
+#include "mail-storage-service.h"
+#include "mail-user.h"
 #include "doveadm.h"
+#include "doveadm-print.h"
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -245,19 +249,74 @@
 		doveadm_exit_code = EX_NOPERM;
 }
 
+static void cmd_user_mail_input_field(const char *key, const char *value,
+				      const char *show_field)
+{
+	if (show_field == NULL) {
+		doveadm_print(key);
+		doveadm_print(value);
+	} else if (strcmp(show_field, key) == 0) {
+		printf("%s\n", value);
+	}
+}
+
+static int cmd_user_mail_input(struct mail_storage_service_ctx *storage_service,
+			       const struct authtest_input *input,
+			       const char *show_field)
+{
+	struct mail_storage_service_input service_input;
+	struct mail_storage_service_user *service_user;
+	struct mail_user *user;
+	const struct mail_storage_settings *mail_set;
+	const char *error;
+	int ret;
+
+	memset(&service_input, 0, sizeof(service_input));
+	service_input.module = "mail";
+	service_input.service = input->info.service;
+	service_input.username = input->username;
+	service_input.local_ip = input->info.local_ip;
+	service_input.local_port = input->info.local_port;
+	service_input.remote_ip = input->info.remote_ip;
+	service_input.remote_port = input->info.remote_port;
+
+	if ((ret = mail_storage_service_lookup_next(storage_service, &service_input,
+						    &service_user, &user,
+						    &error)) <= 0)
+		return ret == 0 ? 0 : -1;
+
+	if (show_field == NULL) {
+		doveadm_print_init(DOVEADM_PRINT_TYPE_TAB);
+		doveadm_print_header_simple("field");
+		doveadm_print_header_simple("value");
+	}
+
+	cmd_user_mail_input_field("uid", user->set->mail_uid, show_field);
+	cmd_user_mail_input_field("gid", user->set->mail_gid, show_field);
+	cmd_user_mail_input_field("home", user->set->mail_home, show_field);
+
+	mail_set = mail_user_set_get_storage_set(user);
+	cmd_user_mail_input_field("mail", mail_set->mail_location, show_field);
+
+	mail_user_unref(&user);
+	mail_storage_service_user_free(&service_user);
+	return 1;
+}
+
 static void cmd_user(int argc, char *argv[])
 {
 	const char *auth_socket_path = NULL;
 	struct authtest_input input;
 	const char *show_field = NULL;
+	struct mail_storage_service_ctx *storage_service = NULL;
 	unsigned int i;
-	bool have_wildcards;
-	int c;
+	bool have_wildcards, mail_fields = FALSE, first = TRUE;
+	int c, ret;
 
 	memset(&input, 0, sizeof(input));
 	input.info.service = "doveadm";
 
-	while ((c = getopt(argc, argv, "a:f:x:")) > 0) {
+	while ((c = getopt(argc, argv, "a:f:mx:")) > 0) {
 		switch (c) {
 		case 'a':
 			auth_socket_path = optarg;
@@ -265,6 +324,9 @@
 		case 'f':
 			show_field = optarg;
 			break;
+		case 'm':
+			mail_fields = TRUE;
+			break;
 		case 'x':
 			auth_user_info_parse(&input.info, optarg);
 			break;
@@ -285,27 +347,37 @@
 		}
 	}
 
-	if (have_wildcards)
+	if (have_wildcards) {
 		cmd_user_list(auth_socket_path, &input, argv + optind);
-	else {
-		bool first = TRUE;
+		return;
+	}
 
-		while ((input.username = argv[optind++]) != NULL) {
-			if (first)
-				first = FALSE;
-			else
-				putchar('\n');
-			switch (cmd_user_input(auth_socket_path, &input,
-					       show_field)) {
-			case -1:
-				doveadm_exit_code = EX_TEMPFAIL;
-				break;
-			case 0:
-				doveadm_exit_code = EX_NOUSER;
-				break;
-			}
+	if (mail_fields) {
+		storage_service = mail_storage_service_init(master_service, NULL,
+			MAIL_STORAGE_SERVICE_FLAG_NO_LOG_INIT |
+			MAIL_STORAGE_SERVICE_FLAG_USERDB_LOOKUP);
+	}
+
+	while ((input.username = argv[optind++]) != NULL) {
+		if (first)
+			first = FALSE;
+		else
+			putchar('\n');
+
+		ret = mail_fields ?
+			cmd_user_mail_input(storage_service, &input, show_field) :
+			cmd_user_input(auth_socket_path, &input, show_field);
+		switch (ret) {
+		case -1:
+			doveadm_exit_code = EX_TEMPFAIL;
+			break;
+		case 0:
+			doveadm_exit_code = EX_NOUSER;
+			break;
 		}
 	}
+	if (storage_service != NULL)
+		mail_storage_service_deinit(&storage_service);
 }
 
 struct doveadm_cmd doveadm_cmd_auth = {
@@ -315,5 +387,5 @@
 
 struct doveadm_cmd doveadm_cmd_user = {
 	cmd_user, "user",
-	"[-a <userdb socket path>] [-x <auth info>] [-f field] <user mask> [...]"
+	"[-a <userdb socket path>] [-x <auth info>] [-f field] [-m] <user mask> [...]"
 };


More information about the dovecot-cvs mailing list