From: Timo Sirainen Date: Tue, 28 May 2013 14:10:03 +0000 (+0300) Subject: doveadm-server: Pass local/remote_ip/port to passdb lookups so proxy_maybe works. X-Git-Tag: 2.2.3~116 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b372fc2d5331a7669e91b05a09404f3303895ce2;p=thirdparty%2Fdovecot%2Fcore.git doveadm-server: Pass local/remote_ip/port to passdb lookups so proxy_maybe works. --- diff --git a/src/doveadm/client-connection.c b/src/doveadm/client-connection.c index 0afca75c25..08c3a874b0 100644 --- a/src/doveadm/client-connection.c +++ b/src/doveadm/client-connection.c @@ -166,6 +166,10 @@ static bool client_handle_command(struct client_connection *conn, char **args) memset(&input, 0, sizeof(input)); input.service = "doveadm"; + input.local_ip = conn->local_ip; + input.remote_ip = conn->remote_ip; + input.local_port = conn->local_port; + input.remote_port = conn->remote_port; for (argc = 0; args[argc] != NULL; argc++) args[argc] = str_tabunescape(args[argc]); @@ -390,7 +394,6 @@ struct client_connection * client_connection_create(int fd, int listen_fd, bool ssl) { struct client_connection *conn; - unsigned int port; pool_t pool; pool = pool_alloconly_create("doveadm client", 1024*16); @@ -402,8 +405,8 @@ client_connection_create(int fd, int listen_fd, bool ssl) conn->output = o_stream_create_fd(fd, (size_t)-1, FALSE); o_stream_set_no_error_handling(conn->output, TRUE); - (void)net_getsockname(fd, &conn->local_ip, &port); - (void)net_getpeername(fd, &conn->remote_ip, &port); + (void)net_getsockname(fd, &conn->local_ip, &conn->local_port); + (void)net_getpeername(fd, &conn->remote_ip, &conn->remote_port); if (client_connection_read_settings(conn) < 0) { client_connection_destroy(&conn); diff --git a/src/doveadm/client-connection.h b/src/doveadm/client-connection.h index 020cf860a4..9cf3c3fe28 100644 --- a/src/doveadm/client-connection.h +++ b/src/doveadm/client-connection.h @@ -12,6 +12,7 @@ struct client_connection { struct ostream *output; struct ssl_iostream *ssl_iostream; struct ip_addr local_ip, remote_ip; + unsigned int local_port, remote_port; const struct doveadm_settings *set; unsigned int handshaked:1; diff --git a/src/doveadm/doveadm-mail-server.c b/src/doveadm/doveadm-mail-server.c index da0fe49ab1..4460cac847 100644 --- a/src/doveadm/doveadm-mail-server.c +++ b/src/doveadm/doveadm-mail-server.c @@ -190,6 +190,10 @@ doveadm_mail_server_user_get_host(struct doveadm_mail_cmd_context *ctx, memset(&info, 0, sizeof(info)); info.service = master_service_get_name(master_service); + info.local_ip = input->local_ip; + info.remote_ip = input->remote_ip; + info.local_port = input->local_port; + info.remote_port = input->remote_port; pool = pool_alloconly_create("auth lookup", 1024); auth_conn = mail_storage_service_get_auth_conn(ctx->storage_service);