Mercurial > dovecot > core-2.2
annotate src/pop3-login/pop3-proxy.c @ 9002:9d0037a997f4 HEAD
Initial commit for config rewrite.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Tue, 27 Jan 2009 18:21:53 -0500 |
parents | b9faf4db2a9f |
children | 21d4363a3cf7 |
rev | line source |
---|---|
8590
b9faf4db2a9f
Updated copyright notices to include year 2009.
Timo Sirainen <tss@iki.fi>
parents:
8583
diff
changeset
|
1 /* Copyright (c) 2004-2009 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" |
2773
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
5 #include "istream.h" |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
6 #include "ostream.h" |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
7 #include "base64.h" |
2773
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
8 #include "safe-memset.h" |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
9 #include "str.h" |
7117
769181a20483
Make sure all user input is sanitized before it's logged.
Timo Sirainen <tss@iki.fi>
parents:
7086
diff
changeset
|
10 #include "str-sanitize.h" |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
11 #include "client.h" |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
12 #include "pop3-proxy.h" |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
13 |
8583
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
14 #define PROXY_FAILURE_MSG "-ERR [IN-USE] "AUTH_TEMP_FAILED_MSG |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
15 |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
16 static void proxy_free_password(struct pop3_client *client) |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
17 { |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
18 if (client->proxy_password == NULL) |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
19 return; |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
20 |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
21 safe_memset(client->proxy_password, 0, strlen(client->proxy_password)); |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
22 i_free_and_null(client->proxy_password); |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
23 } |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
24 |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
25 static void proxy_failed(struct pop3_client *client, bool send_line) |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
26 { |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
27 if (send_line) |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
28 client_send_line(client, PROXY_FAILURE_MSG); |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
29 |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
30 login_proxy_free(&client->proxy); |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
31 proxy_free_password(client); |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
32 i_free_and_null(client->proxy_user); |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
33 i_free_and_null(client->proxy_master_user); |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
34 |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
35 /* call this last - it may destroy the client */ |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
36 client_auth_failed(client, TRUE); |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
37 } |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
38 |
8546
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
39 static void get_plain_auth(struct pop3_client *client, string_t *dest) |
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
40 { |
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
41 string_t *str; |
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
42 |
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
43 str = t_str_new(128); |
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
44 str_append(str, client->proxy_user); |
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
45 str_append_c(str, '\0'); |
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
46 str_append(str, client->proxy_master_user); |
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
47 str_append_c(str, '\0'); |
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
48 str_append(str, client->proxy_password); |
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
49 base64_encode(str_data(str), str_len(str), dest); |
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
50 } |
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
51 |
8583
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
52 static int proxy_input_line(struct pop3_client *client, |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
53 struct ostream *output, const char *line) |
2773
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
54 { |
2785
fc4b1ec1b3ef
Use USER/PASS instad for AUTH PLAIN. Also don't require "+OK" to have
Timo Sirainen <tss@iki.fi>
parents:
2783
diff
changeset
|
55 string_t *str; |
2773
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
56 |
5138
20302f49eda3
Don't crash if the remote server disconnects before we're logged in.
Timo Sirainen <tss@iki.fi>
parents:
5046
diff
changeset
|
57 i_assert(!client->destroyed); |
20302f49eda3
Don't crash if the remote server disconnects before we're logged in.
Timo Sirainen <tss@iki.fi>
parents:
5046
diff
changeset
|
58 |
2835
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
59 switch (client->proxy_state) { |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
60 case 0: |
2773
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
61 /* this is a banner */ |
2785
fc4b1ec1b3ef
Use USER/PASS instad for AUTH PLAIN. Also don't require "+OK" to have
Timo Sirainen <tss@iki.fi>
parents:
2783
diff
changeset
|
62 if (strncmp(line, "+OK", 3) != 0) { |
8583
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
63 client_syslog_err(&client->common, t_strdup_printf( |
7117
769181a20483
Make sure all user input is sanitized before it's logged.
Timo Sirainen <tss@iki.fi>
parents:
7086
diff
changeset
|
64 "proxy: Remote returned invalid banner: %s", |
769181a20483
Make sure all user input is sanitized before it's logged.
Timo Sirainen <tss@iki.fi>
parents:
7086
diff
changeset
|
65 str_sanitize(line, 160))); |
8583
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
66 proxy_failed(client, TRUE); |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
67 return -1; |
2773
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
68 } |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
69 |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
70 str = t_str_new(128); |
8546
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
71 if (client->proxy_master_user == NULL) { |
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
72 /* send USER command */ |
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
73 str_append(str, "USER "); |
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
74 str_append(str, client->proxy_user); |
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
75 str_append(str, "\r\n"); |
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
76 } else { |
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
77 /* master user login - use AUTH PLAIN. */ |
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
78 str_append(str, "AUTH PLAIN\r\n"); |
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
79 } |
2773
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
80 (void)o_stream_send(output, str_data(str), str_len(str)); |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
81 |
2835
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
82 client->proxy_state++; |
8583
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
83 return 0; |
2835
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
84 case 1: |
8546
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
85 str = t_str_new(128); |
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
86 if (client->proxy_master_user == NULL) { |
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
87 if (strncmp(line, "+OK", 3) != 0) |
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
88 break; |
2835
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
89 |
8546
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
90 /* USER successful, send PASS */ |
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
91 str_append(str, "PASS "); |
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
92 str_append(str, client->proxy_password); |
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
93 str_append(str, "\r\n"); |
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
94 } else { |
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
95 if (*line != '+') |
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
96 break; |
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
97 /* AUTH successful, send the authentication data */ |
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
98 get_plain_auth(client, str); |
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
99 str_append(str, "\r\n"); |
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
100 } |
8583
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
101 (void)o_stream_send(output, str_data(str), str_len(str)); |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
102 proxy_free_password(client); |
2835
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
103 client->proxy_state++; |
8583
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
104 return 0; |
2835
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
105 case 2: |
2850
4e5b1a1494c5
Check that PASS replies with OK.
Timo Sirainen <tss@iki.fi>
parents:
2835
diff
changeset
|
106 if (strncmp(line, "+OK", 3) != 0) |
4e5b1a1494c5
Check that PASS replies with OK.
Timo Sirainen <tss@iki.fi>
parents:
2835
diff
changeset
|
107 break; |
4e5b1a1494c5
Check that PASS replies with OK.
Timo Sirainen <tss@iki.fi>
parents:
2835
diff
changeset
|
108 |
2835
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
109 /* Login successful. Send this line to client. */ |
7454
053ec63146cb
Send the success reply in one write. Based on patch by Onno Molenkamp.
Timo Sirainen <tss@iki.fi>
parents:
7438
diff
changeset
|
110 line = t_strconcat(line, "\r\n", NULL); |
2835
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
111 (void)o_stream_send_str(client->output, line); |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
112 |
8097
4d6cc7bb3426
Proxy: Log destuser in the "proxying" line if it's different from username.
Timo Sirainen <tss@iki.fi>
parents:
7927
diff
changeset
|
113 str = t_str_new(128); |
4d6cc7bb3426
Proxy: Log destuser in the "proxying" line if it's different from username.
Timo Sirainen <tss@iki.fi>
parents:
7927
diff
changeset
|
114 str_printfa(str, "proxy(%s): started proxying to %s:%u", |
4d6cc7bb3426
Proxy: Log destuser in the "proxying" line if it's different from username.
Timo Sirainen <tss@iki.fi>
parents:
7927
diff
changeset
|
115 client->common.virtual_user, |
4d6cc7bb3426
Proxy: Log destuser in the "proxying" line if it's different from username.
Timo Sirainen <tss@iki.fi>
parents:
7927
diff
changeset
|
116 login_proxy_get_host(client->proxy), |
4d6cc7bb3426
Proxy: Log destuser in the "proxying" line if it's different from username.
Timo Sirainen <tss@iki.fi>
parents:
7927
diff
changeset
|
117 login_proxy_get_port(client->proxy)); |
4d6cc7bb3426
Proxy: Log destuser in the "proxying" line if it's different from username.
Timo Sirainen <tss@iki.fi>
parents:
7927
diff
changeset
|
118 if (strcmp(client->common.virtual_user, |
4d6cc7bb3426
Proxy: Log destuser in the "proxying" line if it's different from username.
Timo Sirainen <tss@iki.fi>
parents:
7927
diff
changeset
|
119 client->proxy_user) != 0) { |
4d6cc7bb3426
Proxy: Log destuser in the "proxying" line if it's different from username.
Timo Sirainen <tss@iki.fi>
parents:
7927
diff
changeset
|
120 /* remote username is different, log it */ |
4d6cc7bb3426
Proxy: Log destuser in the "proxying" line if it's different from username.
Timo Sirainen <tss@iki.fi>
parents:
7927
diff
changeset
|
121 str_append_c(str, '/'); |
4d6cc7bb3426
Proxy: Log destuser in the "proxying" line if it's different from username.
Timo Sirainen <tss@iki.fi>
parents:
7927
diff
changeset
|
122 str_append(str, client->proxy_user); |
4d6cc7bb3426
Proxy: Log destuser in the "proxying" line if it's different from username.
Timo Sirainen <tss@iki.fi>
parents:
7927
diff
changeset
|
123 } |
8546
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
124 if (client->proxy_master_user != NULL) { |
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
125 str_printfa(str, " (master %s)", |
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
126 client->proxy_master_user); |
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
127 } |
5046
f2cc68a3a198
Log the proxy destination host:port.
Timo Sirainen <tss@iki.fi>
parents:
4907
diff
changeset
|
128 |
7927
2351a81ce699
If commands are pipelined after the login command, pass them to the
Timo Sirainen <tss@iki.fi>
parents:
7454
diff
changeset
|
129 login_proxy_detach(client->proxy, client->common.input, |
2835
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
130 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
|
131 |
2835
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
132 client->proxy = NULL; |
7927
2351a81ce699
If commands are pipelined after the login command, pass them to the
Timo Sirainen <tss@iki.fi>
parents:
7454
diff
changeset
|
133 client->common.input = NULL; |
2835
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
134 client->output = NULL; |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
135 client->common.fd = -1; |
8097
4d6cc7bb3426
Proxy: Log destuser in the "proxying" line if it's different from username.
Timo Sirainen <tss@iki.fi>
parents:
7927
diff
changeset
|
136 client_destroy_success(client, str_c(str)); |
8583
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
137 return 0; |
2835
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
138 } |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
139 |
7216
56f8ac7a3a77
If proxy fails to log in to the backend server, forward the error message
Timo Sirainen <tss@iki.fi>
parents:
7117
diff
changeset
|
140 /* Login failed. Pass through the error message to client |
56f8ac7a3a77
If proxy fails to log in to the backend server, forward the error message
Timo Sirainen <tss@iki.fi>
parents:
7117
diff
changeset
|
141 (see imap-proxy code for potential problems with this) */ |
56f8ac7a3a77
If proxy fails to log in to the backend server, forward the error message
Timo Sirainen <tss@iki.fi>
parents:
7117
diff
changeset
|
142 if (strncmp(line, "-ERR ", 5) != 0) |
56f8ac7a3a77
If proxy fails to log in to the backend server, forward the error message
Timo Sirainen <tss@iki.fi>
parents:
7117
diff
changeset
|
143 client_send_line(client, "-ERR "AUTH_FAILED_MSG); |
56f8ac7a3a77
If proxy fails to log in to the backend server, forward the error message
Timo Sirainen <tss@iki.fi>
parents:
7117
diff
changeset
|
144 else |
56f8ac7a3a77
If proxy fails to log in to the backend server, forward the error message
Timo Sirainen <tss@iki.fi>
parents:
7117
diff
changeset
|
145 client_send_line(client, line); |
2785
fc4b1ec1b3ef
Use USER/PASS instad for AUTH PLAIN. Also don't require "+OK" to have
Timo Sirainen <tss@iki.fi>
parents:
2783
diff
changeset
|
146 |
9002
9d0037a997f4
Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
8590
diff
changeset
|
147 if (login_settings->verbose_auth) { |
8123
26b67708b365
imap/pop3-proxy: If auth_verbose=yes, log proxy login failures.
Timo Sirainen <tss@iki.fi>
parents:
8097
diff
changeset
|
148 str = t_str_new(128); |
26b67708b365
imap/pop3-proxy: If auth_verbose=yes, log proxy login failures.
Timo Sirainen <tss@iki.fi>
parents:
8097
diff
changeset
|
149 str_printfa(str, "proxy(%s): Login failed to %s:%u", |
26b67708b365
imap/pop3-proxy: If auth_verbose=yes, log proxy login failures.
Timo Sirainen <tss@iki.fi>
parents:
8097
diff
changeset
|
150 client->common.virtual_user, |
26b67708b365
imap/pop3-proxy: If auth_verbose=yes, log proxy login failures.
Timo Sirainen <tss@iki.fi>
parents:
8097
diff
changeset
|
151 login_proxy_get_host(client->proxy), |
26b67708b365
imap/pop3-proxy: If auth_verbose=yes, log proxy login failures.
Timo Sirainen <tss@iki.fi>
parents:
8097
diff
changeset
|
152 login_proxy_get_port(client->proxy)); |
26b67708b365
imap/pop3-proxy: If auth_verbose=yes, log proxy login failures.
Timo Sirainen <tss@iki.fi>
parents:
8097
diff
changeset
|
153 if (strcmp(client->common.virtual_user, |
26b67708b365
imap/pop3-proxy: If auth_verbose=yes, log proxy login failures.
Timo Sirainen <tss@iki.fi>
parents:
8097
diff
changeset
|
154 client->proxy_user) != 0) { |
26b67708b365
imap/pop3-proxy: If auth_verbose=yes, log proxy login failures.
Timo Sirainen <tss@iki.fi>
parents:
8097
diff
changeset
|
155 /* remote username is different, log it */ |
26b67708b365
imap/pop3-proxy: If auth_verbose=yes, log proxy login failures.
Timo Sirainen <tss@iki.fi>
parents:
8097
diff
changeset
|
156 str_append_c(str, '/'); |
26b67708b365
imap/pop3-proxy: If auth_verbose=yes, log proxy login failures.
Timo Sirainen <tss@iki.fi>
parents:
8097
diff
changeset
|
157 str_append(str, client->proxy_user); |
26b67708b365
imap/pop3-proxy: If auth_verbose=yes, log proxy login failures.
Timo Sirainen <tss@iki.fi>
parents:
8097
diff
changeset
|
158 } |
8546
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
159 if (client->proxy_master_user != NULL) { |
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
160 str_printfa(str, " (master %s)", |
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
161 client->proxy_master_user); |
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
162 } |
8123
26b67708b365
imap/pop3-proxy: If auth_verbose=yes, log proxy login failures.
Timo Sirainen <tss@iki.fi>
parents:
8097
diff
changeset
|
163 str_append(str, ": "); |
26b67708b365
imap/pop3-proxy: If auth_verbose=yes, log proxy login failures.
Timo Sirainen <tss@iki.fi>
parents:
8097
diff
changeset
|
164 if (strncmp(line, "-ERR ", 5) == 0) |
26b67708b365
imap/pop3-proxy: If auth_verbose=yes, log proxy login failures.
Timo Sirainen <tss@iki.fi>
parents:
8097
diff
changeset
|
165 str_append(str, line + 5); |
26b67708b365
imap/pop3-proxy: If auth_verbose=yes, log proxy login failures.
Timo Sirainen <tss@iki.fi>
parents:
8097
diff
changeset
|
166 else |
26b67708b365
imap/pop3-proxy: If auth_verbose=yes, log proxy login failures.
Timo Sirainen <tss@iki.fi>
parents:
8097
diff
changeset
|
167 str_append(str, line); |
26b67708b365
imap/pop3-proxy: If auth_verbose=yes, log proxy login failures.
Timo Sirainen <tss@iki.fi>
parents:
8097
diff
changeset
|
168 i_info("%s", str_c(str)); |
26b67708b365
imap/pop3-proxy: If auth_verbose=yes, log proxy login failures.
Timo Sirainen <tss@iki.fi>
parents:
8097
diff
changeset
|
169 } |
8583
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
170 proxy_failed(client, FALSE); |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
171 return -1; |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
172 } |
8123
26b67708b365
imap/pop3-proxy: If auth_verbose=yes, log proxy login failures.
Timo Sirainen <tss@iki.fi>
parents:
8097
diff
changeset
|
173 |
8583
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
174 static void proxy_input(struct istream *input, struct ostream *output, |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
175 struct pop3_client *client) |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
176 { |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
177 const char *line; |
2835
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
178 |
8583
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
179 if (input == NULL) { |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
180 if (client->proxy == NULL) { |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
181 /* we're just freeing the proxy */ |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
182 return; |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
183 } |
2773
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
184 |
8583
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
185 if (client->destroyed) { |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
186 /* we came here from client_destroy() */ |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
187 return; |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
188 } |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
189 |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
190 /* failed for some reason, probably server disconnected */ |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
191 proxy_failed(client, TRUE); |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
192 return; |
2835
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
193 } |
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 |
8583
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
195 i_assert(!client->destroyed); |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
196 |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
197 switch (i_stream_read(input)) { |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
198 case -2: |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
199 client_syslog_err(&client->common, |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
200 "proxy: Remote input buffer full"); |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
201 proxy_failed(client, TRUE); |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
202 return; |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
203 case -1: |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
204 client_syslog_err(&client->common, |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
205 "proxy: Remote disconnected"); |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
206 proxy_failed(client, TRUE); |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
207 return; |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
208 } |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
209 |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
210 while ((line = i_stream_next_line(input)) != NULL) { |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
211 if (proxy_input_line(client, output, line) < 0) |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
212 break; |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
213 } |
2773
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
214 } |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
215 |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
216 int pop3_proxy_new(struct pop3_client *client, const char *host, |
8546
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
217 unsigned int port, const char *user, const char *master_user, |
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
218 const char *password) |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
219 { |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
220 i_assert(user != NULL); |
4770
88c29111fcee
Crashfixes and more asserts. Mostly related to use of AUTHENTICATE/AUTH
Timo Sirainen <tss@iki.fi>
parents:
4669
diff
changeset
|
221 i_assert(!client->destroyed); |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
222 |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
223 if (password == NULL) { |
8583
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
224 client_syslog_err(&client->common, "proxy: password not given"); |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
225 client_send_line(client, PROXY_FAILURE_MSG); |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
226 return -1; |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
227 } |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
228 |
4560
507088c0d511
Fixes for handling near-full connection queues.
Timo Sirainen <tss@iki.fi>
parents:
3879
diff
changeset
|
229 i_assert(client->refcount > 1); |
507088c0d511
Fixes for handling near-full connection queues.
Timo Sirainen <tss@iki.fi>
parents:
3879
diff
changeset
|
230 connection_queue_add(1); |
507088c0d511
Fixes for handling near-full connection queues.
Timo Sirainen <tss@iki.fi>
parents:
3879
diff
changeset
|
231 |
4770
88c29111fcee
Crashfixes and more asserts. Mostly related to use of AUTHENTICATE/AUTH
Timo Sirainen <tss@iki.fi>
parents:
4669
diff
changeset
|
232 if (client->destroyed) { |
88c29111fcee
Crashfixes and more asserts. Mostly related to use of AUTHENTICATE/AUTH
Timo Sirainen <tss@iki.fi>
parents:
4669
diff
changeset
|
233 /* connection_queue_add() decided that we were the oldest |
88c29111fcee
Crashfixes and more asserts. Mostly related to use of AUTHENTICATE/AUTH
Timo Sirainen <tss@iki.fi>
parents:
4669
diff
changeset
|
234 connection and killed us. */ |
88c29111fcee
Crashfixes and more asserts. Mostly related to use of AUTHENTICATE/AUTH
Timo Sirainen <tss@iki.fi>
parents:
4669
diff
changeset
|
235 return -1; |
88c29111fcee
Crashfixes and more asserts. Mostly related to use of AUTHENTICATE/AUTH
Timo Sirainen <tss@iki.fi>
parents:
4669
diff
changeset
|
236 } |
8583
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
237 if (login_proxy_is_ourself(&client->common, host, port, user)) { |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
238 client_syslog_err(&client->common, "Proxying loops to itself"); |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
239 client_send_line(client, PROXY_FAILURE_MSG); |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
240 return -1; |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
241 } |
4770
88c29111fcee
Crashfixes and more asserts. Mostly related to use of AUTHENTICATE/AUTH
Timo Sirainen <tss@iki.fi>
parents:
4669
diff
changeset
|
242 |
2773
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
243 client->proxy = login_proxy_new(&client->common, host, port, |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
244 proxy_input, client); |
8583
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
245 if (client->proxy == NULL) { |
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
246 client_send_line(client, PROXY_FAILURE_MSG); |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
247 return -1; |
8583
2ff2cac3578b
imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents:
8546
diff
changeset
|
248 } |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
249 |
2835
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
250 client->proxy_state = 0; |
2773
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
251 client->proxy_user = i_strdup(user); |
8546
50f49805b13b
imap/pop3 proxy: Support master user logins.
Timo Sirainen <tss@iki.fi>
parents:
8123
diff
changeset
|
252 client->proxy_master_user = i_strdup(master_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
|
253 client->proxy_password = i_strdup(password); |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
254 |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
255 /* disable input until authentication is finished */ |
3879
928229f8b3e6
deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents:
3082
diff
changeset
|
256 if (client->io != NULL) |
928229f8b3e6
deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents:
3082
diff
changeset
|
257 io_remove(&client->io); |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
258 return 0; |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
259 } |