Mercurial > dovecot > original-hg > dovecot-1.2
annotate src/imap-login/client-authenticate.c @ 1499:e850252cdc7e HEAD
Removed I/O priorities. They were pretty much useless and were just getting
in way.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Fri, 23 May 2003 17:40:49 +0300 |
parents | e0065ebba5b3 |
children | 43815588dd6b |
rev | line source |
---|---|
1049
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1 /* Copyright (C) 2002 Timo Sirainen */ |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
3 #include "common.h" |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
4 #include "base64.h" |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
5 #include "buffer.h" |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
6 #include "ioloop.h" |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
7 #include "istream.h" |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
8 #include "ostream.h" |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
9 #include "safe-memset.h" |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
10 #include "str.h" |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
11 #include "imap-parser.h" |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
12 #include "auth-connection.h" |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
13 #include "../auth/auth-mech-desc.h" |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
14 #include "client.h" |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
15 #include "client-authenticate.h" |
1084
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
16 #include "auth-common.h" |
1049
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
17 #include "master.h" |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
18 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
19 static enum auth_mech auth_mechs = 0; |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
20 static char *auth_mechs_capability = NULL; |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
21 |
1473
7709e997903f
Don't advertise AUTH=PLAIN in capability if disable_plaintext_auth = yes and
Timo Sirainen <tss@iki.fi>
parents:
1275
diff
changeset
|
22 const char *client_authenticate_get_capabilities(int tls) |
1049
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
23 { |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
24 string_t *str; |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
25 int i; |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
26 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
27 if (auth_mechs == available_auth_mechs) |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
28 return auth_mechs_capability; |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
29 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
30 auth_mechs = available_auth_mechs; |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
31 i_free(auth_mechs_capability); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
32 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
33 str = t_str_new(128); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
34 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
35 for (i = 0; i < AUTH_MECH_COUNT; i++) { |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
36 if ((auth_mechs & auth_mech_desc[i].mech) && |
1473
7709e997903f
Don't advertise AUTH=PLAIN in capability if disable_plaintext_auth = yes and
Timo Sirainen <tss@iki.fi>
parents:
1275
diff
changeset
|
37 auth_mech_desc[i].name != NULL && |
7709e997903f
Don't advertise AUTH=PLAIN in capability if disable_plaintext_auth = yes and
Timo Sirainen <tss@iki.fi>
parents:
1275
diff
changeset
|
38 (tls || !auth_mech_desc[i].plaintext || |
7709e997903f
Don't advertise AUTH=PLAIN in capability if disable_plaintext_auth = yes and
Timo Sirainen <tss@iki.fi>
parents:
1275
diff
changeset
|
39 !disable_plaintext_auth)) { |
1049
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
40 str_append_c(str, ' '); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
41 str_append(str, "AUTH="); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
42 str_append(str, auth_mech_desc[i].name); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
43 } |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
44 } |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
45 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
46 auth_mechs_capability = i_strdup_empty(str_c(str)); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
47 return auth_mechs_capability; |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
48 } |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
49 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
50 static struct auth_mech_desc *auth_mech_find(const char *name) |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
51 { |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
52 int i; |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
53 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
54 for (i = 0; i < AUTH_MECH_COUNT; i++) { |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
55 if (auth_mech_desc[i].name != NULL && |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
56 strcasecmp(auth_mech_desc[i].name, name) == 0) |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
57 return &auth_mech_desc[i]; |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
58 } |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
59 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
60 return NULL; |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
61 } |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
62 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
63 static void client_auth_abort(struct imap_client *client, const char *msg) |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
64 { |
1499
e850252cdc7e
Removed I/O priorities. They were pretty much useless and were just getting
Timo Sirainen <tss@iki.fi>
parents:
1474
diff
changeset
|
65 client->authenticating = FALSE; |
e850252cdc7e
Removed I/O priorities. They were pretty much useless and were just getting
Timo Sirainen <tss@iki.fi>
parents:
1474
diff
changeset
|
66 |
1084
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
67 if (client->common.auth_request != NULL) { |
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
68 auth_abort_request(client->common.auth_request); |
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
69 auth_request_unref(client->common.auth_request); |
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
70 client->common.auth_request = NULL; |
1049
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
71 } |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
72 |
1084
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
73 client_send_tagline(client, msg != NULL ? |
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
74 t_strconcat("NO ", msg, NULL) : |
1049
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
75 "NO Authentication failed."); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
76 o_stream_flush(client->output); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
77 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
78 /* get back to normal client input */ |
1084
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
79 if (client->common.io != NULL) |
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
80 io_remove(client->common.io); |
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
81 client->common.io = client->common.fd == -1 ? NULL : |
1049
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
82 io_add(client->common.fd, IO_READ, client_input, client); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
83 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
84 client_unref(client); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
85 } |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
86 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
87 static void master_callback(struct client *_client, int success) |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
88 { |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
89 struct imap_client *client = (struct imap_client *) _client; |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
90 const char *reason = NULL; |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
91 |
1084
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
92 if (success) { |
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
93 reason = t_strconcat("Login: ", client->common.virtual_user, |
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
94 NULL); |
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
95 } else { |
1049
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
96 reason = t_strconcat("Internal login failure: ", |
1084
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
97 client->common.virtual_user, NULL); |
1049
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
98 client_send_line(client, "* BYE Internal login failure."); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
99 } |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
100 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
101 client_destroy(client, reason); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
102 client_unref(client); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
103 } |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
104 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
105 static void client_send_auth_data(struct imap_client *client, |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
106 const unsigned char *data, size_t size) |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
107 { |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
108 buffer_t *buf; |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
109 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
110 t_push(); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
111 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
112 buf = buffer_create_dynamic(data_stack_pool, size*2, (size_t)-1); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
113 buffer_append(buf, "+ ", 2); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
114 base64_encode(data, size, buf); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
115 buffer_append(buf, "\r\n", 2); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
116 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
117 o_stream_send(client->output, buffer_get_data(buf, NULL), |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
118 buffer_get_used_size(buf)); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
119 o_stream_flush(client->output); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
120 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
121 t_pop(); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
122 } |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
123 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
124 static void login_callback(struct auth_request *request, |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
125 struct auth_login_reply *reply, |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
126 const unsigned char *data, struct client *_client) |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
127 { |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
128 struct imap_client *client = (struct imap_client *) _client; |
1084
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
129 const char *error; |
1049
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
130 const void *ptr; |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
131 size_t size; |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
132 |
1084
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
133 switch (auth_callback(request, reply, data, _client, |
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
134 master_callback, &error)) { |
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
135 case -1: |
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
136 /* login failed */ |
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
137 client_auth_abort(client, error); |
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
138 break; |
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
139 |
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
140 case 0: |
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
141 /* continue */ |
1049
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
142 ptr = buffer_get_data(client->plain_login, &size); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
143 auth_continue_request(request, ptr, size); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
144 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
145 buffer_set_used_size(client->plain_login, 0); |
1084
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
146 break; |
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
147 default: |
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
148 /* success, we should be able to log in. if we fail, just |
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
149 disconnect the client. */ |
1275
af685269ead0
login: Wait until we're connected to auth process before executing command
Timo Sirainen <tss@iki.fi>
parents:
1085
diff
changeset
|
150 client->authenticating = FALSE; |
1084
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
151 client_send_tagline(client, "OK Logged in."); |
1049
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
152 } |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
153 } |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
154 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
155 int cmd_login(struct imap_client *client, struct imap_arg *args) |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
156 { |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
157 const char *user, *pass, *error; |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
158 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
159 /* two arguments: username and password */ |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
160 if (args[0].type != IMAP_ARG_ATOM && args[0].type != IMAP_ARG_STRING) |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
161 return FALSE; |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
162 if (args[1].type != IMAP_ARG_ATOM && args[1].type != IMAP_ARG_STRING) |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
163 return FALSE; |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
164 if (args[2].type != IMAP_ARG_EOL) |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
165 return FALSE; |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
166 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
167 user = IMAP_ARG_STR(&args[0]); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
168 pass = IMAP_ARG_STR(&args[1]); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
169 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
170 if (!client->tls && disable_plaintext_auth) { |
1474
e0065ebba5b3
If client tries to do LOGIN even if it's disabled, send [ALERT] to user.
Timo Sirainen <tss@iki.fi>
parents:
1473
diff
changeset
|
171 client_send_line(client, |
e0065ebba5b3
If client tries to do LOGIN even if it's disabled, send [ALERT] to user.
Timo Sirainen <tss@iki.fi>
parents:
1473
diff
changeset
|
172 "* BAD [ALERT] Plaintext authentication is disabled, " |
e0065ebba5b3
If client tries to do LOGIN even if it's disabled, send [ALERT] to user.
Timo Sirainen <tss@iki.fi>
parents:
1473
diff
changeset
|
173 "but your client sent password in plaintext anyway." |
e0065ebba5b3
If client tries to do LOGIN even if it's disabled, send [ALERT] to user.
Timo Sirainen <tss@iki.fi>
parents:
1473
diff
changeset
|
174 "If anyone was listening, the password was exposed."); |
1049
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
175 client_send_tagline(client, |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
176 "NO Plaintext authentication disabled."); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
177 return TRUE; |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
178 } |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
179 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
180 /* authorization ID \0 authentication ID \0 pass */ |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
181 buffer_set_used_size(client->plain_login, 0); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
182 buffer_append_c(client->plain_login, '\0'); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
183 buffer_append(client->plain_login, user, strlen(user)); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
184 buffer_append_c(client->plain_login, '\0'); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
185 buffer_append(client->plain_login, pass, strlen(pass)); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
186 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
187 client_ref(client); |
1085
40c2be9abdd3
Send protocol with auth requests
Timo Sirainen <tss@iki.fi>
parents:
1084
diff
changeset
|
188 if (auth_init_request(AUTH_MECH_PLAIN, AUTH_PROTOCOL_IMAP, |
40c2be9abdd3
Send protocol with auth requests
Timo Sirainen <tss@iki.fi>
parents:
1084
diff
changeset
|
189 login_callback, &client->common, &error)) { |
1049
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
190 /* don't read any input from client until login is finished */ |
1084
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
191 if (client->common.io != NULL) { |
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
192 io_remove(client->common.io); |
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
193 client->common.io = NULL; |
1049
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
194 } |
1275
af685269ead0
login: Wait until we're connected to auth process before executing command
Timo Sirainen <tss@iki.fi>
parents:
1085
diff
changeset
|
195 client->authenticating = TRUE; |
1049
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
196 return TRUE; |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
197 } else { |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
198 client_send_tagline(client, t_strconcat( |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
199 "NO Login failed: ", error, NULL)); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
200 client_unref(client); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
201 return TRUE; |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
202 } |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
203 } |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
204 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
205 static void authenticate_callback(struct auth_request *request, |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
206 struct auth_login_reply *reply, |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
207 const unsigned char *data, |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
208 struct client *_client) |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
209 { |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
210 struct imap_client *client = (struct imap_client *) _client; |
1084
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
211 const char *error; |
1049
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
212 |
1084
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
213 switch (auth_callback(request, reply, data, _client, |
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
214 master_callback, &error)) { |
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
215 case -1: |
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
216 /* login failed */ |
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
217 client_auth_abort(client, error); |
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
218 break; |
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
219 |
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
220 case 0: |
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
221 /* continue */ |
1049
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
222 client_send_auth_data(client, data, reply->data_size); |
1084
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
223 break; |
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
224 default: |
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
225 /* success, we should be able to log in. if we fail, just |
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
226 disconnect the client. */ |
1275
af685269ead0
login: Wait until we're connected to auth process before executing command
Timo Sirainen <tss@iki.fi>
parents:
1085
diff
changeset
|
227 client->authenticating = FALSE; |
1084
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
228 client_send_tagline(client, "OK Logged in."); |
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
229 } |
1049
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
230 } |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
231 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
232 static void client_auth_input(void *context) |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
233 { |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
234 struct imap_client *client = context; |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
235 buffer_t *buf; |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
236 char *line; |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
237 size_t linelen, bufsize; |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
238 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
239 if (!client_read(client)) |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
240 return; |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
241 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
242 if (client->skip_line) { |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
243 if (i_stream_next_line(client->input) == NULL) |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
244 return; |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
245 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
246 client->skip_line = FALSE; |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
247 } |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
248 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
249 /* @UNSAFE */ |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
250 line = i_stream_next_line(client->input); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
251 if (line == NULL) |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
252 return; |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
253 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
254 if (strcmp(line, "*") == 0) { |
1084
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
255 client_auth_abort(client, "Authentication aborted"); |
1049
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
256 return; |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
257 } |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
258 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
259 linelen = strlen(line); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
260 buf = buffer_create_static_hard(data_stack_pool, linelen); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
261 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
262 if (base64_decode((const unsigned char *) line, linelen, |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
263 NULL, buf) <= 0) { |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
264 /* failed */ |
1084
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
265 client_auth_abort(client, "Invalid base64 data"); |
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
266 } else if (client->common.auth_request == NULL) { |
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
267 client_auth_abort(client, "Don't send unrequested data"); |
1049
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
268 } else { |
1084
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
269 auth_continue_request(client->common.auth_request, |
1049
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
270 buffer_get_data(buf, NULL), |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
271 buffer_get_used_size(buf)); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
272 } |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
273 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
274 /* clear sensitive data */ |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
275 safe_memset(line, 0, linelen); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
276 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
277 bufsize = buffer_get_used_size(buf); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
278 safe_memset(buffer_free_without_data(buf), 0, bufsize); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
279 } |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
280 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
281 int cmd_authenticate(struct imap_client *client, struct imap_arg *args) |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
282 { |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
283 struct auth_mech_desc *mech; |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
284 const char *mech_name, *error; |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
285 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
286 /* we want only one argument: authentication mechanism name */ |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
287 if (args[0].type != IMAP_ARG_ATOM && args[0].type != IMAP_ARG_STRING) |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
288 return FALSE; |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
289 if (args[1].type != IMAP_ARG_EOL) |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
290 return FALSE; |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
291 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
292 mech_name = IMAP_ARG_STR(&args[0]); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
293 if (*mech_name == '\0') |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
294 return FALSE; |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
295 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
296 mech = auth_mech_find(mech_name); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
297 if (mech == NULL) { |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
298 client_send_tagline(client, |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
299 "NO Unsupported authentication mechanism."); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
300 return TRUE; |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
301 } |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
302 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
303 if (!client->tls && mech->plaintext && disable_plaintext_auth) { |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
304 client_send_tagline(client, |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
305 "NO Plaintext authentication disabled."); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
306 return TRUE; |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
307 } |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
308 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
309 client_ref(client); |
1085
40c2be9abdd3
Send protocol with auth requests
Timo Sirainen <tss@iki.fi>
parents:
1084
diff
changeset
|
310 if (auth_init_request(mech->mech, AUTH_PROTOCOL_IMAP, |
40c2be9abdd3
Send protocol with auth requests
Timo Sirainen <tss@iki.fi>
parents:
1084
diff
changeset
|
311 authenticate_callback, &client->common, &error)) { |
1049
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
312 /* following input data will go to authentication */ |
1084
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
313 if (client->common.io != NULL) |
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
314 io_remove(client->common.io); |
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
315 client->common.io = io_add(client->common.fd, IO_READ, |
86b8c9cb7ac0
Moved more auth code to login-common.
Timo Sirainen <tss@iki.fi>
parents:
1083
diff
changeset
|
316 client_auth_input, client); |
1275
af685269ead0
login: Wait until we're connected to auth process before executing command
Timo Sirainen <tss@iki.fi>
parents:
1085
diff
changeset
|
317 client->authenticating = TRUE; |
1049
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
318 } else { |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
319 client_send_tagline(client, t_strconcat( |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
320 "NO Authentication failed: ", error, NULL)); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
321 client_unref(client); |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
322 } |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
323 |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
324 return TRUE; |
c41787e8c3f4
Moved common login process code to login-common, created pop3-login.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
325 } |