diff src/director/doveadm-connection.c @ 11823:4138737f41e6

doveadm: Added "director map" command to list user -> host mappings.
author Timo Sirainen <tss@iki.fi>
date Thu, 15 Jul 2010 15:28:32 +0100
parents a07aa85f68c9
children 06a7435b6f53
line wrap: on
line diff
--- a/src/director/doveadm-connection.c	Thu Jul 15 13:42:33 2010 +0100
+++ b/src/director/doveadm-connection.c	Thu Jul 15 15:28:32 2010 +0100
@@ -195,6 +195,40 @@
 	return TRUE;
 }
 
+static bool
+doveadm_cmd_user_list(struct doveadm_connection *conn, const char *line)
+{
+	struct user_directory_iter *iter;
+	struct user *user;
+	struct ip_addr ip;
+
+	if (*line != '\0') {
+		if (net_addr2ip(line, &ip) < 0) {
+			i_error("doveadm sent invalid USER-LIST parameters");
+			return FALSE;
+		}
+	} else {
+		ip.family = 0;
+	}
+
+	iter = user_directory_iter_init(conn->dir->users);
+	while ((user = user_directory_iter_next(iter)) != NULL) {
+		if (ip.family == 0 ||
+		    net_ip_compare(&ip, &user->host->ip)) T_BEGIN {
+			unsigned int expire_time = user->timestamp +
+				conn->dir->set->director_user_expire;
+
+			o_stream_send_str(conn->output, t_strdup_printf(
+				"%u\t%u\t%s\n",
+				user->username_hash, expire_time,
+				net_ip2addr(&user->host->ip)));
+		} T_END;
+	}
+	user_directory_iter_deinit(&iter);
+	o_stream_send(conn->output, "\n", 1);
+	return TRUE;
+}
+
 static void doveadm_connection_input(struct doveadm_connection *conn)
 {
 	const char *line, *cmd, *args;
@@ -236,6 +270,8 @@
 			ret = doveadm_cmd_host_flush(conn, args);
 		else if (strcmp(cmd, "USER-LOOKUP") == 0)
 			ret = doveadm_cmd_user_lookup(conn, args);
+		else if (strcmp(cmd, "USER-LIST") == 0)
+			ret = doveadm_cmd_user_list(conn, args);
 		else {
 			i_error("doveadm sent unknown command: %s", line);
 			ret = FALSE;