Mercurial > dovecot > original-hg > dovecot-1.2
annotate src/login-common/login-proxy.c @ 7238:983c6ea05de0 HEAD
Compile fix with some compilers
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Wed, 13 Feb 2008 20:08:11 +0200 |
parents | 8c6a7af67e8c |
children | 81806d402514 |
rev | line source |
---|---|
7086
7ed926ed7aa4
Updated copyright notices to include year 2008.
Timo Sirainen <tss@iki.fi>
parents:
6475
diff
changeset
|
1 /* Copyright (c) 2004-2008 Dovecot authors, see the included COPYING file */ |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2 |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
3 #include "common.h" |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
4 #include "ioloop.h" |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
5 #include "istream.h" |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
6 #include "ostream.h" |
7119
8c6a7af67e8c
Replaced clients hash with a linked list.
Timo Sirainen <tss@iki.fi>
parents:
7117
diff
changeset
|
7 #include "llist.h" |
7117
769181a20483
Make sure all user input is sanitized before it's logged.
Timo Sirainen <tss@iki.fi>
parents:
7086
diff
changeset
|
8 #include "str-sanitize.h" |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
9 #include "client-common.h" |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
10 #include "login-proxy.h" |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
11 |
2773
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
12 #define MAX_PROXY_INPUT_SIZE 4096 |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
13 #define OUTBUF_THRESHOLD 1024 |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
14 |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
15 struct login_proxy { |
7119
8c6a7af67e8c
Replaced clients hash with a linked list.
Timo Sirainen <tss@iki.fi>
parents:
7117
diff
changeset
|
16 struct login_proxy *prev, *next; |
8c6a7af67e8c
Replaced clients hash with a linked list.
Timo Sirainen <tss@iki.fi>
parents:
7117
diff
changeset
|
17 |
3049
7f503848533e
s/proxy/server/ for variables describing remote server.
Timo Sirainen <tss@iki.fi>
parents:
2790
diff
changeset
|
18 int client_fd, server_fd; |
7f503848533e
s/proxy/server/ for variables describing remote server.
Timo Sirainen <tss@iki.fi>
parents:
2790
diff
changeset
|
19 struct io *client_io, *server_io; |
7f503848533e
s/proxy/server/ for variables describing remote server.
Timo Sirainen <tss@iki.fi>
parents:
2790
diff
changeset
|
20 struct istream *server_input; |
7f503848533e
s/proxy/server/ for variables describing remote server.
Timo Sirainen <tss@iki.fi>
parents:
2790
diff
changeset
|
21 struct ostream *client_output, *server_output; |
4123
8df011c2cdc4
Show client IP properly also with SSL connections.
Timo Sirainen <tss@iki.fi>
parents:
4070
diff
changeset
|
22 struct ip_addr ip; |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
23 |
2786 | 24 char *host, *user; |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
25 unsigned int port; |
2773
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
26 |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
27 proxy_callback_t *callback; |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
28 void *context; |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
29 |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
30 unsigned int destroying:1; |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
31 }; |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
32 |
7119
8c6a7af67e8c
Replaced clients hash with a linked list.
Timo Sirainen <tss@iki.fi>
parents:
7117
diff
changeset
|
33 static struct login_proxy *login_proxies = NULL; |
8c6a7af67e8c
Replaced clients hash with a linked list.
Timo Sirainen <tss@iki.fi>
parents:
7117
diff
changeset
|
34 static unsigned int login_proxy_count = 0; |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
35 |
4907
5b4c9b20eba0
Replaced void *context from a lot of callbacks with the actual context
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
36 static void server_input(struct login_proxy *proxy) |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
37 { |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
38 unsigned char buf[OUTBUF_THRESHOLD]; |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
39 ssize_t ret; |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
40 |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
41 if (o_stream_get_buffer_used_size(proxy->client_output) > |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
42 OUTBUF_THRESHOLD) { |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
43 /* client's output buffer is already quite full. |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
44 don't send more until we're below threshold. */ |
3879
928229f8b3e6
deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents:
3049
diff
changeset
|
45 io_remove(&proxy->server_io); |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
46 return; |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
47 } |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
48 |
3049
7f503848533e
s/proxy/server/ for variables describing remote server.
Timo Sirainen <tss@iki.fi>
parents:
2790
diff
changeset
|
49 ret = net_receive(proxy->server_fd, buf, sizeof(buf)); |
4037 | 50 if (ret < 0 || o_stream_send(proxy->client_output, buf, ret) != ret) |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
51 login_proxy_free(proxy); |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
52 } |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
53 |
4907
5b4c9b20eba0
Replaced void *context from a lot of callbacks with the actual context
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
54 static void proxy_client_input(struct login_proxy *proxy) |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
55 { |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
56 unsigned char buf[OUTBUF_THRESHOLD]; |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
57 ssize_t ret; |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
58 |
3049
7f503848533e
s/proxy/server/ for variables describing remote server.
Timo Sirainen <tss@iki.fi>
parents:
2790
diff
changeset
|
59 if (o_stream_get_buffer_used_size(proxy->server_output) > |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
60 OUTBUF_THRESHOLD) { |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
61 /* proxy's output buffer is already quite full. |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
62 don't send more until we're below threshold. */ |
3879
928229f8b3e6
deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents:
3049
diff
changeset
|
63 io_remove(&proxy->client_io); |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
64 return; |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
65 } |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
66 |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
67 ret = net_receive(proxy->client_fd, buf, sizeof(buf)); |
4037 | 68 if (ret < 0 || o_stream_send(proxy->server_output, buf, ret) != ret) |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
69 login_proxy_free(proxy); |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
70 } |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
71 |
4907
5b4c9b20eba0
Replaced void *context from a lot of callbacks with the actual context
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
72 static int server_output(struct login_proxy *proxy) |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
73 { |
3049
7f503848533e
s/proxy/server/ for variables describing remote server.
Timo Sirainen <tss@iki.fi>
parents:
2790
diff
changeset
|
74 if (o_stream_flush(proxy->server_output) < 0) { |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
75 login_proxy_free(proxy); |
2790
02c0b8d532c2
Changed ostream's flush callback to have return value which can tell if
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
76 return 1; |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
77 } |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
78 |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
79 if (proxy->client_io == NULL && |
3049
7f503848533e
s/proxy/server/ for variables describing remote server.
Timo Sirainen <tss@iki.fi>
parents:
2790
diff
changeset
|
80 o_stream_get_buffer_used_size(proxy->server_output) < |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
81 OUTBUF_THRESHOLD) { |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
82 /* there's again space in proxy's output buffer, so we can |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
83 read more from client. */ |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
84 proxy->client_io = io_add(proxy->client_fd, IO_READ, |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
85 proxy_client_input, proxy); |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
86 } |
2790
02c0b8d532c2
Changed ostream's flush callback to have return value which can tell if
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
87 return 1; |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
88 } |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
89 |
4907
5b4c9b20eba0
Replaced void *context from a lot of callbacks with the actual context
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
90 static int proxy_client_output(struct login_proxy *proxy) |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
91 { |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
92 if (o_stream_flush(proxy->client_output) < 0) { |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
93 login_proxy_free(proxy); |
2790
02c0b8d532c2
Changed ostream's flush callback to have return value which can tell if
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
94 return 1; |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
95 } |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
96 |
3049
7f503848533e
s/proxy/server/ for variables describing remote server.
Timo Sirainen <tss@iki.fi>
parents:
2790
diff
changeset
|
97 if (proxy->server_io == NULL && |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
98 o_stream_get_buffer_used_size(proxy->client_output) < |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
99 OUTBUF_THRESHOLD) { |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
100 /* there's again space in client's output buffer, so we can |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
101 read more from proxy. */ |
3049
7f503848533e
s/proxy/server/ for variables describing remote server.
Timo Sirainen <tss@iki.fi>
parents:
2790
diff
changeset
|
102 proxy->server_io = |
7f503848533e
s/proxy/server/ for variables describing remote server.
Timo Sirainen <tss@iki.fi>
parents:
2790
diff
changeset
|
103 io_add(proxy->server_fd, IO_READ, server_input, proxy); |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
104 } |
2790
02c0b8d532c2
Changed ostream's flush callback to have return value which can tell if
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
105 return 1; |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
106 } |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
107 |
4907
5b4c9b20eba0
Replaced void *context from a lot of callbacks with the actual context
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
108 static void proxy_prelogin_input(struct login_proxy *proxy) |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
109 { |
3049
7f503848533e
s/proxy/server/ for variables describing remote server.
Timo Sirainen <tss@iki.fi>
parents:
2790
diff
changeset
|
110 proxy->callback(proxy->server_input, proxy->server_output, |
2773
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
111 proxy->context); |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
112 } |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
113 |
4907
5b4c9b20eba0
Replaced void *context from a lot of callbacks with the actual context
Timo Sirainen <tss@iki.fi>
parents:
4903
diff
changeset
|
114 static void proxy_wait_connect(struct login_proxy *proxy) |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
115 { |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
116 int err; |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
117 |
3049
7f503848533e
s/proxy/server/ for variables describing remote server.
Timo Sirainen <tss@iki.fi>
parents:
2790
diff
changeset
|
118 err = net_geterror(proxy->server_fd); |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
119 if (err != 0) { |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
120 i_error("proxy: connect(%s, %u) failed: %s", |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
121 proxy->host, proxy->port, strerror(err)); |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
122 login_proxy_free(proxy); |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
123 return; |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
124 } |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
125 |
2773
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
126 /* connect successful */ |
3049
7f503848533e
s/proxy/server/ for variables describing remote server.
Timo Sirainen <tss@iki.fi>
parents:
2790
diff
changeset
|
127 proxy->server_input = |
6162
896cc473c1f0
Renamed i_stream_create_file() to i_stream_create_fd().
Timo Sirainen <tss@iki.fi>
parents:
6161
diff
changeset
|
128 i_stream_create_fd(proxy->server_fd, MAX_PROXY_INPUT_SIZE, |
896cc473c1f0
Renamed i_stream_create_file() to i_stream_create_fd().
Timo Sirainen <tss@iki.fi>
parents:
6161
diff
changeset
|
129 FALSE); |
3049
7f503848533e
s/proxy/server/ for variables describing remote server.
Timo Sirainen <tss@iki.fi>
parents:
2790
diff
changeset
|
130 proxy->server_output = |
6161
c62f7ee79446
Split o_stream_create_file() to _create_fd() and _create_fd_file().
Timo Sirainen <tss@iki.fi>
parents:
6142
diff
changeset
|
131 o_stream_create_fd(proxy->server_fd, (size_t)-1, FALSE); |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
132 |
3879
928229f8b3e6
deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents:
3049
diff
changeset
|
133 io_remove(&proxy->server_io); |
3049
7f503848533e
s/proxy/server/ for variables describing remote server.
Timo Sirainen <tss@iki.fi>
parents:
2790
diff
changeset
|
134 proxy->server_io = |
7f503848533e
s/proxy/server/ for variables describing remote server.
Timo Sirainen <tss@iki.fi>
parents:
2790
diff
changeset
|
135 io_add(proxy->server_fd, IO_READ, proxy_prelogin_input, proxy); |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
136 } |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
137 |
4903
204d7edc7cdc
Added context parameter type safety checks for most callback APIs.
Timo Sirainen <tss@iki.fi>
parents:
4669
diff
changeset
|
138 #undef login_proxy_new |
2773
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
139 struct login_proxy * |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
140 login_proxy_new(struct client *client, const char *host, unsigned int port, |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
141 proxy_callback_t *callback, void *context) |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
142 { |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
143 struct login_proxy *proxy; |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
144 struct ip_addr ip; |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
145 int fd; |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
146 |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
147 if (host == NULL) { |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
148 i_error("proxy(%s): host not given", client->virtual_user); |
2773
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
149 return NULL; |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
150 } |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
151 |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
152 if (net_addr2ip(host, &ip) < 0) { |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
153 i_error("proxy(%s): %s is not a valid IP", |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
154 client->virtual_user, host); |
2773
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
155 return NULL; |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
156 } |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
157 |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
158 fd = net_connect_ip(&ip, port, NULL); |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
159 if (fd < 0) { |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
160 i_error("proxy(%s): connect(%s, %u) failed: %m", |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
161 client->virtual_user, host, port); |
2773
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
162 return NULL; |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
163 } |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
164 |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
165 proxy = i_new(struct login_proxy, 1); |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
166 proxy->host = i_strdup(host); |
2786 | 167 proxy->user = i_strdup(client->virtual_user); |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
168 proxy->port = port; |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
169 |
3049
7f503848533e
s/proxy/server/ for variables describing remote server.
Timo Sirainen <tss@iki.fi>
parents:
2790
diff
changeset
|
170 proxy->server_fd = fd; |
7f503848533e
s/proxy/server/ for variables describing remote server.
Timo Sirainen <tss@iki.fi>
parents:
2790
diff
changeset
|
171 proxy->server_io = io_add(fd, IO_WRITE, proxy_wait_connect, proxy); |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
172 |
2773
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
173 proxy->callback = callback; |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
174 proxy->context = context; |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
175 |
4123
8df011c2cdc4
Show client IP properly also with SSL connections.
Timo Sirainen <tss@iki.fi>
parents:
4070
diff
changeset
|
176 proxy->ip = client->ip; |
2773
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
177 proxy->client_fd = -1; |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
178 return proxy; |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
179 } |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
180 |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
181 void login_proxy_free(struct login_proxy *proxy) |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
182 { |
4123
8df011c2cdc4
Show client IP properly also with SSL connections.
Timo Sirainen <tss@iki.fi>
parents:
4070
diff
changeset
|
183 const char *ipstr; |
2786 | 184 |
2773
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
185 if (proxy->destroying) |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
186 return; |
4669
d84a7bd63862
Reference counter fixing for client while it's being used in login proxy.
Timo Sirainen <tss@iki.fi>
parents:
4538
diff
changeset
|
187 proxy->destroying = TRUE; |
2773
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
188 |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
189 if (proxy->client_fd != -1) { |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
190 /* detached proxy */ |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
191 main_unref(); |
7119
8c6a7af67e8c
Replaced clients hash with a linked list.
Timo Sirainen <tss@iki.fi>
parents:
7117
diff
changeset
|
192 DLLIST_REMOVE(&login_proxies, proxy); |
8c6a7af67e8c
Replaced clients hash with a linked list.
Timo Sirainen <tss@iki.fi>
parents:
7117
diff
changeset
|
193 login_proxy_count--; |
2773
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
194 |
4123
8df011c2cdc4
Show client IP properly also with SSL connections.
Timo Sirainen <tss@iki.fi>
parents:
4070
diff
changeset
|
195 ipstr = net_ip2addr(&proxy->ip); |
2786 | 196 i_info("proxy(%s): disconnecting %s", |
7117
769181a20483
Make sure all user input is sanitized before it's logged.
Timo Sirainen <tss@iki.fi>
parents:
7086
diff
changeset
|
197 str_sanitize(proxy->user, 80), |
769181a20483
Make sure all user input is sanitized before it's logged.
Timo Sirainen <tss@iki.fi>
parents:
7086
diff
changeset
|
198 ipstr != NULL ? ipstr : ""); |
2786 | 199 |
2773
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
200 if (proxy->client_io != NULL) |
3879
928229f8b3e6
deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents:
3049
diff
changeset
|
201 io_remove(&proxy->client_io); |
2773
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
202 if (proxy->client_output != NULL) |
4070
71b8faa84ec6
Added i_stream_destroy() and o_stream_destroy() and used them instead of
Timo Sirainen <tss@iki.fi>
parents:
4037
diff
changeset
|
203 o_stream_destroy(&proxy->client_output); |
2773
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
204 net_disconnect(proxy->client_fd); |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
205 } else { |
4669
d84a7bd63862
Reference counter fixing for client while it's being used in login proxy.
Timo Sirainen <tss@iki.fi>
parents:
4538
diff
changeset
|
206 i_assert(proxy->client_io == NULL); |
d84a7bd63862
Reference counter fixing for client while it's being used in login proxy.
Timo Sirainen <tss@iki.fi>
parents:
4538
diff
changeset
|
207 i_assert(proxy->client_output == NULL); |
d84a7bd63862
Reference counter fixing for client while it's being used in login proxy.
Timo Sirainen <tss@iki.fi>
parents:
4538
diff
changeset
|
208 |
2773
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
209 proxy->callback(NULL, NULL, proxy->context); |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
210 } |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
211 |
3049
7f503848533e
s/proxy/server/ for variables describing remote server.
Timo Sirainen <tss@iki.fi>
parents:
2790
diff
changeset
|
212 if (proxy->server_io != NULL) |
3879
928229f8b3e6
deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents:
3049
diff
changeset
|
213 io_remove(&proxy->server_io); |
3049
7f503848533e
s/proxy/server/ for variables describing remote server.
Timo Sirainen <tss@iki.fi>
parents:
2790
diff
changeset
|
214 if (proxy->server_input != NULL) |
4070
71b8faa84ec6
Added i_stream_destroy() and o_stream_destroy() and used them instead of
Timo Sirainen <tss@iki.fi>
parents:
4037
diff
changeset
|
215 i_stream_destroy(&proxy->server_input); |
3049
7f503848533e
s/proxy/server/ for variables describing remote server.
Timo Sirainen <tss@iki.fi>
parents:
2790
diff
changeset
|
216 if (proxy->server_output != NULL) |
4070
71b8faa84ec6
Added i_stream_destroy() and o_stream_destroy() and used them instead of
Timo Sirainen <tss@iki.fi>
parents:
4037
diff
changeset
|
217 o_stream_destroy(&proxy->server_output); |
3049
7f503848533e
s/proxy/server/ for variables describing remote server.
Timo Sirainen <tss@iki.fi>
parents:
2790
diff
changeset
|
218 net_disconnect(proxy->server_fd); |
2773
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
219 |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
220 i_free(proxy->host); |
2786 | 221 i_free(proxy->user); |
2773
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
222 i_free(proxy); |
4538
9d9e72374164
Fixes to login process handling, especially with
Timo Sirainen <tss@iki.fi>
parents:
4123
diff
changeset
|
223 |
9d9e72374164
Fixes to login process handling, especially with
Timo Sirainen <tss@iki.fi>
parents:
4123
diff
changeset
|
224 main_listen_start(); |
9d9e72374164
Fixes to login process handling, especially with
Timo Sirainen <tss@iki.fi>
parents:
4123
diff
changeset
|
225 } |
9d9e72374164
Fixes to login process handling, especially with
Timo Sirainen <tss@iki.fi>
parents:
4123
diff
changeset
|
226 |
6472
6afb29dc9273
If proxy points to the same host/port/user combination as we currently have,
Timo Sirainen <tss@iki.fi>
parents:
6429
diff
changeset
|
227 bool login_proxy_is_ourself(struct client *client, const char *host, |
6afb29dc9273
If proxy points to the same host/port/user combination as we currently have,
Timo Sirainen <tss@iki.fi>
parents:
6429
diff
changeset
|
228 unsigned int port, const char *destuser) |
6afb29dc9273
If proxy points to the same host/port/user combination as we currently have,
Timo Sirainen <tss@iki.fi>
parents:
6429
diff
changeset
|
229 { |
6afb29dc9273
If proxy points to the same host/port/user combination as we currently have,
Timo Sirainen <tss@iki.fi>
parents:
6429
diff
changeset
|
230 struct ip_addr ip; |
6afb29dc9273
If proxy points to the same host/port/user combination as we currently have,
Timo Sirainen <tss@iki.fi>
parents:
6429
diff
changeset
|
231 |
6afb29dc9273
If proxy points to the same host/port/user combination as we currently have,
Timo Sirainen <tss@iki.fi>
parents:
6429
diff
changeset
|
232 if (port != client->local_port) |
6afb29dc9273
If proxy points to the same host/port/user combination as we currently have,
Timo Sirainen <tss@iki.fi>
parents:
6429
diff
changeset
|
233 return FALSE; |
6afb29dc9273
If proxy points to the same host/port/user combination as we currently have,
Timo Sirainen <tss@iki.fi>
parents:
6429
diff
changeset
|
234 |
6afb29dc9273
If proxy points to the same host/port/user combination as we currently have,
Timo Sirainen <tss@iki.fi>
parents:
6429
diff
changeset
|
235 if (net_addr2ip(host, &ip) < 0) |
6afb29dc9273
If proxy points to the same host/port/user combination as we currently have,
Timo Sirainen <tss@iki.fi>
parents:
6429
diff
changeset
|
236 return FALSE; |
6afb29dc9273
If proxy points to the same host/port/user combination as we currently have,
Timo Sirainen <tss@iki.fi>
parents:
6429
diff
changeset
|
237 if (!net_ip_compare(&ip, &client->local_ip)) |
6afb29dc9273
If proxy points to the same host/port/user combination as we currently have,
Timo Sirainen <tss@iki.fi>
parents:
6429
diff
changeset
|
238 return FALSE; |
6afb29dc9273
If proxy points to the same host/port/user combination as we currently have,
Timo Sirainen <tss@iki.fi>
parents:
6429
diff
changeset
|
239 |
6afb29dc9273
If proxy points to the same host/port/user combination as we currently have,
Timo Sirainen <tss@iki.fi>
parents:
6429
diff
changeset
|
240 return strcmp(client->virtual_user, destuser) == 0; |
6afb29dc9273
If proxy points to the same host/port/user combination as we currently have,
Timo Sirainen <tss@iki.fi>
parents:
6429
diff
changeset
|
241 } |
6afb29dc9273
If proxy points to the same host/port/user combination as we currently have,
Timo Sirainen <tss@iki.fi>
parents:
6429
diff
changeset
|
242 |
5048
5c0a5cf4626d
Forgot to commit for the "log proxy destination" change.
Timo Sirainen <tss@iki.fi>
parents:
4907
diff
changeset
|
243 const char *login_proxy_get_host(struct login_proxy *proxy) |
5c0a5cf4626d
Forgot to commit for the "log proxy destination" change.
Timo Sirainen <tss@iki.fi>
parents:
4907
diff
changeset
|
244 { |
5c0a5cf4626d
Forgot to commit for the "log proxy destination" change.
Timo Sirainen <tss@iki.fi>
parents:
4907
diff
changeset
|
245 return proxy->host; |
5c0a5cf4626d
Forgot to commit for the "log proxy destination" change.
Timo Sirainen <tss@iki.fi>
parents:
4907
diff
changeset
|
246 } |
5c0a5cf4626d
Forgot to commit for the "log proxy destination" change.
Timo Sirainen <tss@iki.fi>
parents:
4907
diff
changeset
|
247 |
5c0a5cf4626d
Forgot to commit for the "log proxy destination" change.
Timo Sirainen <tss@iki.fi>
parents:
4907
diff
changeset
|
248 unsigned int login_proxy_get_port(struct login_proxy *proxy) |
5c0a5cf4626d
Forgot to commit for the "log proxy destination" change.
Timo Sirainen <tss@iki.fi>
parents:
4907
diff
changeset
|
249 { |
5c0a5cf4626d
Forgot to commit for the "log proxy destination" change.
Timo Sirainen <tss@iki.fi>
parents:
4907
diff
changeset
|
250 return proxy->port; |
5c0a5cf4626d
Forgot to commit for the "log proxy destination" change.
Timo Sirainen <tss@iki.fi>
parents:
4907
diff
changeset
|
251 } |
5c0a5cf4626d
Forgot to commit for the "log proxy destination" change.
Timo Sirainen <tss@iki.fi>
parents:
4907
diff
changeset
|
252 |
4538
9d9e72374164
Fixes to login process handling, especially with
Timo Sirainen <tss@iki.fi>
parents:
4123
diff
changeset
|
253 unsigned int login_proxy_get_count(void) |
9d9e72374164
Fixes to login process handling, especially with
Timo Sirainen <tss@iki.fi>
parents:
4123
diff
changeset
|
254 { |
7119
8c6a7af67e8c
Replaced clients hash with a linked list.
Timo Sirainen <tss@iki.fi>
parents:
7117
diff
changeset
|
255 return login_proxy_count; |
2773
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
256 } |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
257 |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
258 void login_proxy_detach(struct login_proxy *proxy, struct istream *client_input, |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
259 struct ostream *client_output) |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
260 { |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
261 const unsigned char *data; |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
262 size_t size; |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
263 |
4669
d84a7bd63862
Reference counter fixing for client while it's being used in login proxy.
Timo Sirainen <tss@iki.fi>
parents:
4538
diff
changeset
|
264 i_assert(proxy->client_fd == -1); |
d84a7bd63862
Reference counter fixing for client while it's being used in login proxy.
Timo Sirainen <tss@iki.fi>
parents:
4538
diff
changeset
|
265 i_assert(proxy->server_output != NULL); |
d84a7bd63862
Reference counter fixing for client while it's being used in login proxy.
Timo Sirainen <tss@iki.fi>
parents:
4538
diff
changeset
|
266 |
2773
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
267 proxy->client_fd = i_stream_get_fd(client_input); |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
268 proxy->client_output = client_output; |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
269 |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
270 o_stream_set_max_buffer_size(client_output, (size_t)-1); |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
271 o_stream_set_flush_callback(client_output, proxy_client_output, proxy); |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
272 |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
273 /* send all pending client input to proxy and get rid of the stream */ |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
274 data = i_stream_get_data(client_input, &size); |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
275 if (size != 0) |
3049
7f503848533e
s/proxy/server/ for variables describing remote server.
Timo Sirainen <tss@iki.fi>
parents:
2790
diff
changeset
|
276 (void)o_stream_send(proxy->server_output, data, size); |
3879
928229f8b3e6
deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents:
3049
diff
changeset
|
277 i_stream_unref(&client_input); |
2773
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
278 |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
279 /* from now on, just do dummy proxying */ |
3879
928229f8b3e6
deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents:
3049
diff
changeset
|
280 io_remove(&proxy->server_io); |
4036 | 281 proxy->server_io = |
282 io_add(proxy->server_fd, IO_READ, server_input, proxy); | |
283 proxy->client_io = | |
284 io_add(proxy->client_fd, IO_READ, proxy_client_input, proxy); | |
3049
7f503848533e
s/proxy/server/ for variables describing remote server.
Timo Sirainen <tss@iki.fi>
parents:
2790
diff
changeset
|
285 o_stream_set_flush_callback(proxy->server_output, server_output, proxy); |
4669
d84a7bd63862
Reference counter fixing for client while it's being used in login proxy.
Timo Sirainen <tss@iki.fi>
parents:
4538
diff
changeset
|
286 i_stream_destroy(&proxy->server_input); |
d84a7bd63862
Reference counter fixing for client while it's being used in login proxy.
Timo Sirainen <tss@iki.fi>
parents:
4538
diff
changeset
|
287 |
d84a7bd63862
Reference counter fixing for client while it's being used in login proxy.
Timo Sirainen <tss@iki.fi>
parents:
4538
diff
changeset
|
288 proxy->callback = NULL; |
d84a7bd63862
Reference counter fixing for client while it's being used in login proxy.
Timo Sirainen <tss@iki.fi>
parents:
4538
diff
changeset
|
289 proxy->context = NULL; |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
290 |
7119
8c6a7af67e8c
Replaced clients hash with a linked list.
Timo Sirainen <tss@iki.fi>
parents:
7117
diff
changeset
|
291 login_proxy_count++; |
8c6a7af67e8c
Replaced clients hash with a linked list.
Timo Sirainen <tss@iki.fi>
parents:
7117
diff
changeset
|
292 DLLIST_PREPEND(&login_proxies, proxy); |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
293 main_ref(); |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
294 } |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
295 |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
296 void login_proxy_deinit(void) |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
297 { |
7119
8c6a7af67e8c
Replaced clients hash with a linked list.
Timo Sirainen <tss@iki.fi>
parents:
7117
diff
changeset
|
298 while (login_proxies != NULL) |
8c6a7af67e8c
Replaced clients hash with a linked list.
Timo Sirainen <tss@iki.fi>
parents:
7117
diff
changeset
|
299 login_proxy_free(login_proxies); |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
300 } |