]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm-server: Pass local/remote_ip/port to passdb lookups so proxy_maybe works.
authorTimo Sirainen <tss@iki.fi>
Tue, 28 May 2013 14:10:03 +0000 (17:10 +0300)
committerTimo Sirainen <tss@iki.fi>
Tue, 28 May 2013 14:10:03 +0000 (17:10 +0300)
src/doveadm/client-connection.c
src/doveadm/client-connection.h
src/doveadm/doveadm-mail-server.c

index 0afca75c25b8699ef82ea8fb024c38e7914a28a4..08c3a874b09a839d04b37f4bbeaad445f6557770 100644 (file)
@@ -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);
index 020cf860a4c4efffa11110ff1ddf347d1be3d548..9cf3c3fe28814533b8ae9c49cffd83f893a52a39 100644 (file)
@@ -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;
index da0fe49ab11ee66fb01bdb0b0a4b00e4fbb861b4..4460cac84727b73d1cdb9de9965796f7e94f6eac 100644 (file)
@@ -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);