annotate src/pop3-login/pop3-proxy.c @ 3879:928229f8b3e6 HEAD

deinit, unref, destroy, close, free, etc. functions now take a pointer to their data pointer, and set it to NULL. This makes double-frees less likely to cause security holes.
author Timo Sirainen <tss@iki.fi>
date Sat, 14 Jan 2006 20:47:20 +0200
parents 620a00db2c7c
children 507088c0d511
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 */
3879
928229f8b3e6 deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents: 3082
diff changeset
156 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
157 io_remove(&client->io);
2768
d344be0bb70f Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
158 return 0;
d344be0bb70f Added IMAP and POP3 proxying support.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
159 }