Mercurial > dovecot > original-hg > dovecot-1.2
annotate src/pop3-login/pop3-proxy.c @ 3082:620a00db2c7c HEAD
If login failed, send it as "-ERR [IN-USE]" rather as IMAP's "* BYE"..
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 09 Jan 2005 21:56:00 +0200 |
parents | a5dbe1e56c07 |
children | 928229f8b3e6 |
rev | line source |
---|---|
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1 /* Copyright (C) 2004 Timo Sirainen */ |
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" |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
10 #include "client.h" |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
11 #include "pop3-proxy.h" |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
12 |
2773
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
13 static void proxy_input(struct istream *input, struct ostream *output, |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
14 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
|
15 { |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
16 struct pop3_client *client = context; |
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
|
17 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
|
18 const char *line; |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
19 |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
20 if (input == NULL) { |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
21 if (client->io != NULL) { |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
22 /* remote authentication failed, we're just |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
23 freeing the proxy */ |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
24 return; |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
25 } |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
26 |
3054
a5dbe1e56c07
proxy: When we can't connect to remote server, show "Temporary login
Timo Sirainen <tss@iki.fi>
parents:
2850
diff
changeset
|
27 /* failed for some reason, probably server disconnected */ |
3082
620a00db2c7c
If login failed, send it as "-ERR [IN-USE]" rather as IMAP's "* BYE"..
Timo Sirainen <tss@iki.fi>
parents:
3054
diff
changeset
|
28 client_send_line(client, |
620a00db2c7c
If login failed, send it as "-ERR [IN-USE]" rather as IMAP's "* BYE"..
Timo Sirainen <tss@iki.fi>
parents:
3054
diff
changeset
|
29 "-ERR [IN-USE] Temporary login failure."); |
3054
a5dbe1e56c07
proxy: When we can't connect to remote server, show "Temporary login
Timo Sirainen <tss@iki.fi>
parents:
2850
diff
changeset
|
30 client_destroy(client, NULL); |
2773
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
31 return; |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
32 } |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
33 |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
34 switch (i_stream_read(input)) { |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
35 case -2: |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
36 /* buffer full */ |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
37 i_error("pop-proxy(%s): Remote input buffer full", |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
38 client->common.virtual_user); |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
39 client_destroy_internal_failure(client); |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
40 return; |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
41 case -1: |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
42 /* disconnected */ |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
43 client_destroy(client, "Proxy: Remote disconnected"); |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
44 return; |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
45 } |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
46 |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
47 line = i_stream_next_line(input); |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
48 if (line == NULL) |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
49 return; |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
50 |
2835
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
51 switch (client->proxy_state) { |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
52 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
|
53 /* 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
|
54 if (strncmp(line, "+OK", 3) != 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
|
55 i_error("pop3-proxy(%s): " |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
56 "Remote returned invalid banner: %s", |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
57 client->common.virtual_user, line); |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
58 client_destroy_internal_failure(client); |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
59 return; |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
60 } |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
61 |
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 /* send USER command */ |
2773
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
63 str = t_str_new(128); |
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
|
64 str_append(str, "USER "); |
fc4b1ec1b3ef
Use USER/PASS instad for AUTH PLAIN. Also don't require "+OK" to have
Timo Sirainen <tss@iki.fi>
parents:
2783
diff
changeset
|
65 str_append(str, client->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
|
66 str_append(str, "\r\n"); |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
67 (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
|
68 |
2835
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
69 client->proxy_state++; |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
70 return; |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
71 case 1: |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
72 if (strncmp(line, "+OK", 3) != 0) |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
73 break; |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
74 |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
75 /* USER successful, send PASS */ |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
76 str = t_str_new(128); |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
77 str_append(str, "PASS "); |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
78 str_append(str, client->proxy_password); |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
79 str_append(str, "\r\n"); |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
80 (void)o_stream_send(output, str_data(str), |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
81 str_len(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
|
82 |
2835
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
83 safe_memset(client->proxy_password, 0, |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
84 strlen(client->proxy_password)); |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
85 i_free(client->proxy_password); |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
86 client->proxy_password = NULL; |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
87 |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
88 client->proxy_state++; |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
89 return; |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
90 case 2: |
2850
4e5b1a1494c5
Check that PASS replies with OK.
Timo Sirainen <tss@iki.fi>
parents:
2835
diff
changeset
|
91 if (strncmp(line, "+OK", 3) != 0) |
4e5b1a1494c5
Check that PASS replies with OK.
Timo Sirainen <tss@iki.fi>
parents:
2835
diff
changeset
|
92 break; |
4e5b1a1494c5
Check that PASS replies with OK.
Timo Sirainen <tss@iki.fi>
parents:
2835
diff
changeset
|
93 |
2835
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
94 /* Login successful. Send this line to client. */ |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
95 (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
|
96 (void)o_stream_send(client->output, "\r\n", 2); |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
97 |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
98 login_proxy_detach(client->proxy, client->input, |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
99 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
|
100 |
2835
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
101 client->proxy = NULL; |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
102 client->input = NULL; |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
103 client->output = NULL; |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
104 client->common.fd = -1; |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
105 client_destroy(client, |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
106 t_strdup_printf("proxy(%s): started", |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
107 client->common.virtual_user)); |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
108 return; |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
109 } |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
110 |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
111 /* Login failed. Send our own failure reply so client can't |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
112 figure out if user exists or not just by looking at the |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
113 reply string. */ |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
114 client_send_line(client, "-ERR "AUTH_FAILED_MSG); |
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
|
115 |
2835
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
116 /* allow client input again */ |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
117 i_assert(client->io == NULL); |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
118 client->io = io_add(client->common.fd, IO_READ, |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
119 client_input, client); |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
120 |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
121 login_proxy_free(client->proxy); |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
122 client->proxy = NULL; |
2773
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
123 |
2835
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
124 if (client->proxy_password != NULL) { |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
125 safe_memset(client->proxy_password, 0, |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
126 strlen(client->proxy_password)); |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
127 i_free(client->proxy_password); |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
128 client->proxy_password = NULL; |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
129 } |
2773
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
130 |
2835
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
131 i_free(client->proxy_user); |
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
132 client->proxy_user = NULL; |
2773
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
133 } |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
134 |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
135 int pop3_proxy_new(struct pop3_client *client, const char *host, |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
136 unsigned int port, const char *user, const char *password) |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
137 { |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
138 i_assert(user != NULL); |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
139 |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
140 if (password == NULL) { |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
141 i_error("proxy(%s): password not given", |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
142 client->common.virtual_user); |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
143 return -1; |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
144 } |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
145 |
2773
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
146 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
|
147 proxy_input, client); |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
148 if (client->proxy == NULL) |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
149 return -1; |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
150 |
2835
39c315e7697d
Keep proxy_user stored until proxy is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
2786
diff
changeset
|
151 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
|
152 client->proxy_user = i_strdup(user); |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
153 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
|
154 |
e624a9ad6a30
More smart IMAP and POP3 proxies. Now if remote login fails, it just
Timo Sirainen <tss@iki.fi>
parents:
2768
diff
changeset
|
155 /* disable input until authentication is finished */ |
2768
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
156 if (client->io != NULL) { |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
157 io_remove(client->io); |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
158 client->io = NULL; |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
159 } |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
160 |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
161 return 0; |
d344be0bb70f
Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
162 } |