Mercurial > dovecot > core-2.2
annotate src/lib-master/master-login.c @ 22652:09523ad05bef
director: Log whenever HOST-RESET-USERS is used
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Sun, 05 Nov 2017 22:53:23 +0200 |
parents | 7ae7c3c159d1 |
children | cb108f786fb4 |
rev | line source |
---|---|
21390
2e2563132d5f
Updated copyright notices to include the year 2017.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents:
21389
diff
changeset
|
1 /* Copyright (c) 2009-2017 Dovecot authors, see the included COPYING file */ |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2 |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
3 #include "lib.h" |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
4 #include "ioloop.h" |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
5 #include "ostream.h" |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
6 #include "fdpass.h" |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
7 #include "fd-close-on-exec.h" |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
8 #include "llist.h" |
10459
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
9 #include "str.h" |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
10 #include "strescape.h" |
10194
40d8df2b4111
imap, pop3: Connection counting fixes.
Timo Sirainen <tss@iki.fi>
parents:
10101
diff
changeset
|
11 #include "master-service-private.h" |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
12 #include "master-login.h" |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
13 #include "master-login-auth.h" |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
14 |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
15 #include <sys/stat.h> |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
16 #include <unistd.h> |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
17 |
11099
b93ae980b66b
lib-master: Login client connection wasn't closed on some error conditions.
Timo Sirainen <tss@iki.fi>
parents:
11096
diff
changeset
|
18 #define master_login_conn_is_closed(conn) \ |
11104
c2a1163e584f
lib-master: Fixed checking if login connection was already closed.
Timo Sirainen <tss@iki.fi>
parents:
11102
diff
changeset
|
19 ((conn)->fd == -1) |
11108
5074e30d72d4
lib-master: Log an error if login client disconnects too early.
Timo Sirainen <tss@iki.fi>
parents:
11107
diff
changeset
|
20 #define master_login_conn_has_clients(conn) \ |
5074e30d72d4
lib-master: Log an error if login client disconnects too early.
Timo Sirainen <tss@iki.fi>
parents:
11107
diff
changeset
|
21 ((conn)->refcount > 1) |
11099
b93ae980b66b
lib-master: Login client connection wasn't closed on some error conditions.
Timo Sirainen <tss@iki.fi>
parents:
11096
diff
changeset
|
22 |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
23 struct master_login_connection { |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
24 struct master_login_connection *prev, *next; |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
25 |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
26 struct master_login *login; |
10597
873b2aff9196
lib-master: Fixed using post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10588
diff
changeset
|
27 int refcount; |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
28 int fd; |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
29 struct io *io; |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
30 struct ostream *output; |
11102
64bead0067b0
lib-master: Changed post-login process's client counting to make sense again.
Timo Sirainen <tss@iki.fi>
parents:
11099
diff
changeset
|
31 |
64bead0067b0
lib-master: Changed post-login process's client counting to make sense again.
Timo Sirainen <tss@iki.fi>
parents:
11099
diff
changeset
|
32 unsigned int login_success:1; |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
33 }; |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
34 |
10459
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
35 struct master_login_postlogin { |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
36 struct master_login_client *client; |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
37 |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
38 int fd; |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
39 struct io *io; |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
40 struct timeout *to; |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
41 string_t *input; |
11543
356afa6263d4
lib-master: Post-login scripts can now exit to prevent user from logging in, without logging error.
Timo Sirainen <tss@iki.fi>
parents:
11460
diff
changeset
|
42 char *username; |
22420
7ae7c3c159d1
lib-master: Allow userdb to return postlogin socket path.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
43 char *socket_path; |
10459
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
44 }; |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
45 |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
46 struct master_login { |
10194
40d8df2b4111
imap, pop3: Connection counting fixes.
Timo Sirainen <tss@iki.fi>
parents:
10101
diff
changeset
|
47 struct master_service *service; |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
48 master_login_callback_t *callback; |
11018
2e08ce368bc0
Added support for userdb lookup to fail with a reason (many API changes).
Timo Sirainen <tss@iki.fi>
parents:
10837
diff
changeset
|
49 master_login_failure_callback_t *failure_callback; |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
50 struct master_login_connection *conns; |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
51 struct master_login_auth *auth; |
10459
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
52 char *postlogin_socket_path; |
13964
9015f0b8fa4d
imap, pop3: Added -t parameter to specify post-login script timeout.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
53 unsigned int postlogin_timeout_secs; |
10473
a0d99b374aa4
imap, pop3: Close auth/config connections when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10459
diff
changeset
|
54 |
a0d99b374aa4
imap, pop3: Close auth/config connections when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10459
diff
changeset
|
55 unsigned int stopping:1; |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
56 }; |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
57 |
11099
b93ae980b66b
lib-master: Login client connection wasn't closed on some error conditions.
Timo Sirainen <tss@iki.fi>
parents:
11096
diff
changeset
|
58 static void master_login_conn_close(struct master_login_connection *conn); |
10597
873b2aff9196
lib-master: Fixed using post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10588
diff
changeset
|
59 static void master_login_conn_unref(struct master_login_connection **_conn); |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
60 |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
61 struct master_login * |
13964
9015f0b8fa4d
imap, pop3: Added -t parameter to specify post-login script timeout.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
62 master_login_init(struct master_service *service, |
9015f0b8fa4d
imap, pop3: Added -t parameter to specify post-login script timeout.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
63 const struct master_login_settings *set) |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
64 { |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
65 struct master_login *login; |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
66 |
13964
9015f0b8fa4d
imap, pop3: Added -t parameter to specify post-login script timeout.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
67 i_assert(set->postlogin_socket_path == NULL || |
9015f0b8fa4d
imap, pop3: Added -t parameter to specify post-login script timeout.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
68 set->postlogin_timeout_secs > 0); |
9015f0b8fa4d
imap, pop3: Added -t parameter to specify post-login script timeout.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
69 |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
70 login = i_new(struct master_login, 1); |
10194
40d8df2b4111
imap, pop3: Connection counting fixes.
Timo Sirainen <tss@iki.fi>
parents:
10101
diff
changeset
|
71 login->service = service; |
13964
9015f0b8fa4d
imap, pop3: Added -t parameter to specify post-login script timeout.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
72 login->callback = set->callback; |
9015f0b8fa4d
imap, pop3: Added -t parameter to specify post-login script timeout.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
73 login->failure_callback = set->failure_callback; |
15049
aa6027a0a78e
Added support to perform token-based service process authentication.
Stephan Bosch <stephan@rename-it.nl>
parents:
14691
diff
changeset
|
74 login->auth = master_login_auth_init(set->auth_socket_path, |
aa6027a0a78e
Added support to perform token-based service process authentication.
Stephan Bosch <stephan@rename-it.nl>
parents:
14691
diff
changeset
|
75 set->request_auth_token); |
13964
9015f0b8fa4d
imap, pop3: Added -t parameter to specify post-login script timeout.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
76 login->postlogin_socket_path = i_strdup(set->postlogin_socket_path); |
9015f0b8fa4d
imap, pop3: Added -t parameter to specify post-login script timeout.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
77 login->postlogin_timeout_secs = set->postlogin_timeout_secs; |
10473
a0d99b374aa4
imap, pop3: Close auth/config connections when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10459
diff
changeset
|
78 |
a0d99b374aa4
imap, pop3: Close auth/config connections when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10459
diff
changeset
|
79 i_assert(service->login == NULL); |
a0d99b374aa4
imap, pop3: Close auth/config connections when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10459
diff
changeset
|
80 service->login = login; |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
81 return login; |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
82 } |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
83 |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
84 void master_login_deinit(struct master_login **_login) |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
85 { |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
86 struct master_login *login = *_login; |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
87 |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
88 *_login = NULL; |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
89 |
10473
a0d99b374aa4
imap, pop3: Close auth/config connections when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10459
diff
changeset
|
90 i_assert(login->service->login == login); |
a0d99b374aa4
imap, pop3: Close auth/config connections when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10459
diff
changeset
|
91 login->service->login = NULL; |
a0d99b374aa4
imap, pop3: Close auth/config connections when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10459
diff
changeset
|
92 |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
93 master_login_auth_deinit(&login->auth); |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
94 while (login->conns != NULL) { |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
95 struct master_login_connection *conn = login->conns; |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
96 |
11099
b93ae980b66b
lib-master: Login client connection wasn't closed on some error conditions.
Timo Sirainen <tss@iki.fi>
parents:
11096
diff
changeset
|
97 master_login_conn_close(conn); |
b93ae980b66b
lib-master: Login client connection wasn't closed on some error conditions.
Timo Sirainen <tss@iki.fi>
parents:
11096
diff
changeset
|
98 master_login_conn_unref(&conn); |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
99 } |
10459
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
100 i_free(login->postlogin_socket_path); |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
101 i_free(login); |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
102 } |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
103 |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
104 static int |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
105 master_login_conn_read_request(struct master_login_connection *conn, |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
106 struct master_auth_request *req_r, |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
107 unsigned char data[MASTER_AUTH_MAX_DATA_SIZE], |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
108 int *client_fd_r) |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
109 { |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
110 struct stat st; |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
111 ssize_t ret; |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
112 |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
113 *client_fd_r = -1; |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
114 |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
115 ret = fd_read(conn->fd, req_r, sizeof(*req_r), client_fd_r); |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
116 if (ret != sizeof(*req_r)) { |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
117 if (ret == 0) { |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
118 /* disconnected */ |
11108
5074e30d72d4
lib-master: Log an error if login client disconnects too early.
Timo Sirainen <tss@iki.fi>
parents:
11107
diff
changeset
|
119 if (master_login_conn_has_clients(conn)) |
5074e30d72d4
lib-master: Log an error if login client disconnects too early.
Timo Sirainen <tss@iki.fi>
parents:
11107
diff
changeset
|
120 i_error("Login client disconnected too early"); |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
121 } else if (ret > 0) { |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
122 /* request wasn't fully read */ |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
123 i_error("fd_read() partial input (%d/%d)", |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
124 (int)ret, (int)sizeof(*req_r)); |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
125 } else { |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
126 if (errno == EAGAIN) |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
127 return 0; |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
128 |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
129 i_error("fd_read() failed: %m"); |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
130 } |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
131 return -1; |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
132 } |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
133 |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
134 if (req_r->data_size != 0) { |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
135 if (req_r->data_size > MASTER_AUTH_MAX_DATA_SIZE) { |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
136 i_error("Too large auth data_size sent"); |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
137 return -1; |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
138 } |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
139 /* @UNSAFE */ |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
140 ret = read(conn->fd, data, req_r->data_size); |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
141 if (ret != (ssize_t)req_r->data_size) { |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
142 if (ret == 0) { |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
143 /* disconnected */ |
11108
5074e30d72d4
lib-master: Log an error if login client disconnects too early.
Timo Sirainen <tss@iki.fi>
parents:
11107
diff
changeset
|
144 if (master_login_conn_has_clients(conn)) { |
5074e30d72d4
lib-master: Log an error if login client disconnects too early.
Timo Sirainen <tss@iki.fi>
parents:
11107
diff
changeset
|
145 i_error("Login client disconnected too early " |
5074e30d72d4
lib-master: Log an error if login client disconnects too early.
Timo Sirainen <tss@iki.fi>
parents:
11107
diff
changeset
|
146 "(while reading data)"); |
5074e30d72d4
lib-master: Log an error if login client disconnects too early.
Timo Sirainen <tss@iki.fi>
parents:
11107
diff
changeset
|
147 } |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
148 } else if (ret > 0) { |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
149 /* request wasn't fully read */ |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
150 i_error("Data read partially %d/%u", |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
151 (int)ret, req_r->data_size); |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
152 } else { |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
153 i_error("read(data) failed: %m"); |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
154 } |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
155 return -1; |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
156 } |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
157 } |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
158 |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
159 if (*client_fd_r == -1) { |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
160 i_error("Auth request missing a file descriptor"); |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
161 return -1; |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
162 } |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
163 |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
164 if (fstat(*client_fd_r, &st) < 0) { |
10453
32ad99f146d1
lib-master: Minor error message fixes.
Timo Sirainen <tss@iki.fi>
parents:
10199
diff
changeset
|
165 i_error("fstat(fd_read client) failed: %m"); |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
166 return -1; |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
167 } |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
168 if (st.st_ino != req_r->ino) { |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
169 i_error("Auth request inode mismatch: %s != %s", |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
170 dec2str(st.st_ino), dec2str(req_r->ino)); |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
171 return -1; |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
172 } |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
173 return 1; |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
174 } |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
175 |
10597
873b2aff9196
lib-master: Fixed using post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10588
diff
changeset
|
176 static void master_login_client_free(struct master_login_client **_client) |
873b2aff9196
lib-master: Fixed using post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10588
diff
changeset
|
177 { |
873b2aff9196
lib-master: Fixed using post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10588
diff
changeset
|
178 struct master_login_client *client = *_client; |
873b2aff9196
lib-master: Fixed using post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10588
diff
changeset
|
179 |
873b2aff9196
lib-master: Fixed using post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10588
diff
changeset
|
180 *_client = NULL; |
873b2aff9196
lib-master: Fixed using post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10588
diff
changeset
|
181 if (client->fd != -1) { |
873b2aff9196
lib-master: Fixed using post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10588
diff
changeset
|
182 if (close(client->fd) < 0) |
873b2aff9196
lib-master: Fixed using post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10588
diff
changeset
|
183 i_error("close(fd_read client) failed: %m"); |
11983
6f2c1fb1b7f1
lib-master: Prefix log messages with username during auth/post-login lookups.
Timo Sirainen <tss@iki.fi>
parents:
11543
diff
changeset
|
184 /* this client failed (login callback wasn't called). |
6f2c1fb1b7f1
lib-master: Prefix log messages with username during auth/post-login lookups.
Timo Sirainen <tss@iki.fi>
parents:
11543
diff
changeset
|
185 reset prefix to default. */ |
15201
d00cf8e0dae7
i_set_failure_prefix() now takes printf-like parameters.
Timo Sirainen <tss@iki.fi>
parents:
15068
diff
changeset
|
186 i_set_failure_prefix("%s: ", client->conn->login->service->name); |
10597
873b2aff9196
lib-master: Fixed using post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10588
diff
changeset
|
187 } |
873b2aff9196
lib-master: Fixed using post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10588
diff
changeset
|
188 |
11099
b93ae980b66b
lib-master: Login client connection wasn't closed on some error conditions.
Timo Sirainen <tss@iki.fi>
parents:
11096
diff
changeset
|
189 /* FIXME: currently we create a separate connection for each request, |
b93ae980b66b
lib-master: Login client connection wasn't closed on some error conditions.
Timo Sirainen <tss@iki.fi>
parents:
11096
diff
changeset
|
190 so close the connection after we're done with this client */ |
14391
ba1fc76e3a2c
Changes to make static analyzer happier.
Timo Sirainen <tss@iki.fi>
parents:
14309
diff
changeset
|
191 if (!master_login_conn_is_closed(client->conn)) { |
ba1fc76e3a2c
Changes to make static analyzer happier.
Timo Sirainen <tss@iki.fi>
parents:
14309
diff
changeset
|
192 i_assert(client->conn->refcount > 1); |
ba1fc76e3a2c
Changes to make static analyzer happier.
Timo Sirainen <tss@iki.fi>
parents:
14309
diff
changeset
|
193 client->conn->refcount--; |
ba1fc76e3a2c
Changes to make static analyzer happier.
Timo Sirainen <tss@iki.fi>
parents:
14309
diff
changeset
|
194 } |
10597
873b2aff9196
lib-master: Fixed using post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10588
diff
changeset
|
195 master_login_conn_unref(&client->conn); |
18043
fbc969e1543b
lib-master: Removed fixed length limit for session-id.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
196 i_free(client->session_id); |
10597
873b2aff9196
lib-master: Fixed using post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10588
diff
changeset
|
197 i_free(client); |
873b2aff9196
lib-master: Fixed using post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10588
diff
changeset
|
198 } |
873b2aff9196
lib-master: Fixed using post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10588
diff
changeset
|
199 |
10459
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
200 static void master_login_auth_finish(struct master_login_client *client, |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
201 const char *const *auth_args) |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
202 { |
11099
b93ae980b66b
lib-master: Login client connection wasn't closed on some error conditions.
Timo Sirainen <tss@iki.fi>
parents:
11096
diff
changeset
|
203 struct master_login *login = client->conn->login; |
10473
a0d99b374aa4
imap, pop3: Close auth/config connections when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10459
diff
changeset
|
204 struct master_service *service = login->service; |
a0d99b374aa4
imap, pop3: Close auth/config connections when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10459
diff
changeset
|
205 bool close_sockets; |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
206 |
10473
a0d99b374aa4
imap, pop3: Close auth/config connections when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10459
diff
changeset
|
207 close_sockets = service->master_status.available_count == 0 && |
10194
40d8df2b4111
imap, pop3: Connection counting fixes.
Timo Sirainen <tss@iki.fi>
parents:
10101
diff
changeset
|
208 service->service_count_left == 1; |
40d8df2b4111
imap, pop3: Connection counting fixes.
Timo Sirainen <tss@iki.fi>
parents:
10101
diff
changeset
|
209 |
11102
64bead0067b0
lib-master: Changed post-login process's client counting to make sense again.
Timo Sirainen <tss@iki.fi>
parents:
11099
diff
changeset
|
210 client->conn->login_success = TRUE; |
10473
a0d99b374aa4
imap, pop3: Close auth/config connections when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10459
diff
changeset
|
211 login->callback(client, auth_args[0], auth_args+1); |
10597
873b2aff9196
lib-master: Fixed using post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10588
diff
changeset
|
212 |
10473
a0d99b374aa4
imap, pop3: Close auth/config connections when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10459
diff
changeset
|
213 if (close_sockets) { |
10194
40d8df2b4111
imap, pop3: Connection counting fixes.
Timo Sirainen <tss@iki.fi>
parents:
10101
diff
changeset
|
214 /* we're dying as soon as this connection closes. */ |
10473
a0d99b374aa4
imap, pop3: Close auth/config connections when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10459
diff
changeset
|
215 i_assert(master_login_auth_request_count(login->auth) == 0); |
a0d99b374aa4
imap, pop3: Close auth/config connections when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10459
diff
changeset
|
216 master_login_auth_disconnect(login->auth); |
a0d99b374aa4
imap, pop3: Close auth/config connections when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10459
diff
changeset
|
217 |
10194
40d8df2b4111
imap, pop3: Connection counting fixes.
Timo Sirainen <tss@iki.fi>
parents:
10101
diff
changeset
|
218 master_service_close_config_fd(service); |
10473
a0d99b374aa4
imap, pop3: Close auth/config connections when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10459
diff
changeset
|
219 } else if (login->stopping) { |
a0d99b374aa4
imap, pop3: Close auth/config connections when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10459
diff
changeset
|
220 /* try stopping again */ |
a0d99b374aa4
imap, pop3: Close auth/config connections when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10459
diff
changeset
|
221 master_login_stop(login); |
10194
40d8df2b4111
imap, pop3: Connection counting fixes.
Timo Sirainen <tss@iki.fi>
parents:
10101
diff
changeset
|
222 } |
10813
197d9beec207
lib-master: Fixed crashing when using post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10794
diff
changeset
|
223 |
197d9beec207
lib-master: Fixed crashing when using post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10794
diff
changeset
|
224 client->fd = -1; |
197d9beec207
lib-master: Fixed crashing when using post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10794
diff
changeset
|
225 master_login_client_free(&client); |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
226 } |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
227 |
10459
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
228 static void master_login_postlogin_free(struct master_login_postlogin *pl) |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
229 { |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
230 timeout_remove(&pl->to); |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
231 io_remove(&pl->io); |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
232 if (close(pl->fd) < 0) |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
233 i_error("close(postlogin) failed: %m"); |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
234 str_free(&pl->input); |
22420
7ae7c3c159d1
lib-master: Allow userdb to return postlogin socket path.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
235 i_free(pl->socket_path); |
11543
356afa6263d4
lib-master: Post-login scripts can now exit to prevent user from logging in, without logging error.
Timo Sirainen <tss@iki.fi>
parents:
11460
diff
changeset
|
236 i_free(pl->username); |
10459
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
237 i_free(pl); |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
238 } |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
239 |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
240 static void master_login_postlogin_input(struct master_login_postlogin *pl) |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
241 { |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
242 char buf[1024]; |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
243 const char **auth_args, **p; |
21322
5ab8dc1a4a6f
global: Change string position/length from unsigned int to size_t
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19552
diff
changeset
|
244 size_t len; |
10459
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
245 ssize_t ret; |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
246 int fd = -1; |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
247 |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
248 while ((ret = fd_read(pl->fd, buf, sizeof(buf), &fd)) > 0) { |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
249 if (fd != -1) { |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
250 /* post-login script replaced fd */ |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
251 if (close(pl->client->fd) < 0) |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
252 i_error("close(client) failed: %m"); |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
253 pl->client->fd = fd; |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
254 } |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
255 str_append_n(pl->input, buf, ret); |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
256 } |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
257 |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
258 len = str_len(pl->input); |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
259 if (len > 0 && str_c(pl->input)[len-1] == '\n') { |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
260 /* finished reading the input */ |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
261 str_truncate(pl->input, len-1); |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
262 } else { |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
263 if (ret < 0) { |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
264 if (errno == EAGAIN) |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
265 return; |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
266 |
22420
7ae7c3c159d1
lib-master: Allow userdb to return postlogin socket path.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
267 i_error("fd_read(%s) failed: %m", pl->socket_path); |
11543
356afa6263d4
lib-master: Post-login scripts can now exit to prevent user from logging in, without logging error.
Timo Sirainen <tss@iki.fi>
parents:
11460
diff
changeset
|
268 } else if (str_len(pl->input) > 0) { |
10459
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
269 i_error("fd_read(%s) failed: disconnected", |
22420
7ae7c3c159d1
lib-master: Allow userdb to return postlogin socket path.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
270 pl->socket_path); |
11543
356afa6263d4
lib-master: Post-login scripts can now exit to prevent user from logging in, without logging error.
Timo Sirainen <tss@iki.fi>
parents:
11460
diff
changeset
|
271 } else { |
356afa6263d4
lib-master: Post-login scripts can now exit to prevent user from logging in, without logging error.
Timo Sirainen <tss@iki.fi>
parents:
11460
diff
changeset
|
272 i_info("Post-login script denied access to user %s", |
356afa6263d4
lib-master: Post-login scripts can now exit to prevent user from logging in, without logging error.
Timo Sirainen <tss@iki.fi>
parents:
11460
diff
changeset
|
273 pl->username); |
10459
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
274 } |
10597
873b2aff9196
lib-master: Fixed using post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10588
diff
changeset
|
275 master_login_client_free(&pl->client); |
10459
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
276 master_login_postlogin_free(pl); |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
277 return; |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
278 } |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
279 |
14471
fc8031c5e691
Use t_strsplit_tab() wherever possible
Timo Sirainen <tss@iki.fi>
parents:
14391
diff
changeset
|
280 auth_args = t_strsplit_tab(str_c(pl->input)); |
10459
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
281 for (p = auth_args; *p != NULL; p++) |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
282 *p = str_tabunescape(t_strdup_noconst(*p)); |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
283 |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
284 master_login_auth_finish(pl->client, auth_args); |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
285 master_login_postlogin_free(pl); |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
286 } |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
287 |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
288 static void master_login_postlogin_timeout(struct master_login_postlogin *pl) |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
289 { |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
290 i_error("%s: Timeout waiting for post-login script to finish, aborting", |
22420
7ae7c3c159d1
lib-master: Allow userdb to return postlogin socket path.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
291 pl->socket_path); |
10459
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
292 |
10597
873b2aff9196
lib-master: Fixed using post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10588
diff
changeset
|
293 master_login_client_free(&pl->client); |
10459
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
294 master_login_postlogin_free(pl); |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
295 } |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
296 |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
297 static int master_login_postlogin(struct master_login_client *client, |
22420
7ae7c3c159d1
lib-master: Allow userdb to return postlogin socket path.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
298 const char *const *auth_args, |
7ae7c3c159d1
lib-master: Allow userdb to return postlogin socket path.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
299 const char *socket_path) |
10459
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
300 { |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
301 struct master_login *login = client->conn->login; |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
302 struct master_login_postlogin *pl; |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
303 string_t *str; |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
304 unsigned int i; |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
305 int fd; |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
306 ssize_t ret; |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
307 |
22420
7ae7c3c159d1
lib-master: Allow userdb to return postlogin socket path.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
308 fd = net_connect_unix_with_retries(socket_path, 1000); |
10459
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
309 if (fd == -1) { |
16704
a4bfccbc2477
lib-master: If net_connect_unix() fails with EAGAIN, point to a wiki link for reasons.
Timo Sirainen <tss@iki.fi>
parents:
15715
diff
changeset
|
310 i_error("net_connect_unix(%s) failed: %m%s", |
22420
7ae7c3c159d1
lib-master: Allow userdb to return postlogin socket path.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
311 socket_path, errno != EAGAIN ? "" : |
16704
a4bfccbc2477
lib-master: If net_connect_unix() fails with EAGAIN, point to a wiki link for reasons.
Timo Sirainen <tss@iki.fi>
parents:
15715
diff
changeset
|
312 " - http://wiki2.dovecot.org/SocketUnavailable"); |
10459
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
313 return -1; |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
314 } |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
315 |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
316 str = t_str_new(256); |
11460
3ac8c5dd9c30
script-login: Added version check to the protocol.
Timo Sirainen <tss@iki.fi>
parents:
11110
diff
changeset
|
317 str_printfa(str, "VERSION\tscript-login\t1\t0\n" |
3ac8c5dd9c30
script-login: Added version check to the protocol.
Timo Sirainen <tss@iki.fi>
parents:
11110
diff
changeset
|
318 "%s\t%s", net_ip2addr(&client->auth_req.local_ip), |
10459
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
319 net_ip2addr(&client->auth_req.remote_ip)); |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
320 for (i = 0; auth_args[i] != NULL; i++) { |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
321 str_append_c(str, '\t'); |
15068
002e0a120c2a
Renamed str_tabescape_write() to str_append_tabescaped()
Timo Sirainen <tss@iki.fi>
parents:
15049
diff
changeset
|
322 str_append_tabescaped(str, auth_args[i]); |
10459
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
323 } |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
324 str_append_c(str, '\n'); |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
325 ret = fd_send(fd, client->fd, str_data(str), str_len(str)); |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
326 if (ret != (ssize_t)str_len(str)) { |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
327 if (ret < 0) { |
22420
7ae7c3c159d1
lib-master: Allow userdb to return postlogin socket path.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
328 i_error("write(%s) failed: %m", socket_path); |
10459
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
329 } else { |
22420
7ae7c3c159d1
lib-master: Allow userdb to return postlogin socket path.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
330 i_error("write(%s) failed: partial write", socket_path); |
10459
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
331 } |
14691
3945a3646c67
Changed i_close_fd() API to set the fd to -1 after closing.
Timo Sirainen <tss@iki.fi>
parents:
14687
diff
changeset
|
332 i_close_fd(&fd); |
10459
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
333 return -1; |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
334 } |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
335 net_set_nonblock(fd, TRUE); |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
336 |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
337 pl = i_new(struct master_login_postlogin, 1); |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
338 pl->client = client; |
11543
356afa6263d4
lib-master: Post-login scripts can now exit to prevent user from logging in, without logging error.
Timo Sirainen <tss@iki.fi>
parents:
11460
diff
changeset
|
339 pl->username = i_strdup(auth_args[0]); |
22420
7ae7c3c159d1
lib-master: Allow userdb to return postlogin socket path.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
340 pl->socket_path = i_strdup(socket_path); |
10459
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
341 pl->fd = fd; |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
342 pl->io = io_add(fd, IO_READ, master_login_postlogin_input, pl); |
13964
9015f0b8fa4d
imap, pop3: Added -t parameter to specify post-login script timeout.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
343 pl->to = timeout_add(login->postlogin_timeout_secs * 1000, |
10459
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
344 master_login_postlogin_timeout, pl); |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
345 pl->input = str_new(default_pool, 512); |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
346 return 0; |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
347 } |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
348 |
22420
7ae7c3c159d1
lib-master: Allow userdb to return postlogin socket path.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
349 static const char * |
7ae7c3c159d1
lib-master: Allow userdb to return postlogin socket path.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
350 auth_args_find_postlogin_socket(const char *const *auth_args) |
7ae7c3c159d1
lib-master: Allow userdb to return postlogin socket path.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
351 { |
7ae7c3c159d1
lib-master: Allow userdb to return postlogin socket path.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
352 for (unsigned int i = 0; auth_args[i] != NULL; i++) { |
7ae7c3c159d1
lib-master: Allow userdb to return postlogin socket path.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
353 if (strncmp(auth_args[i], "postlogin=", 10) == 0) |
7ae7c3c159d1
lib-master: Allow userdb to return postlogin socket path.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
354 return auth_args[i]+10; |
7ae7c3c159d1
lib-master: Allow userdb to return postlogin socket path.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
355 } |
7ae7c3c159d1
lib-master: Allow userdb to return postlogin socket path.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
356 return NULL; |
7ae7c3c159d1
lib-master: Allow userdb to return postlogin socket path.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
357 } |
7ae7c3c159d1
lib-master: Allow userdb to return postlogin socket path.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
358 |
10459
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
359 static void |
11018
2e08ce368bc0
Added support for userdb lookup to fail with a reason (many API changes).
Timo Sirainen <tss@iki.fi>
parents:
10837
diff
changeset
|
360 master_login_auth_callback(const char *const *auth_args, const char *errormsg, |
2e08ce368bc0
Added support for userdb lookup to fail with a reason (many API changes).
Timo Sirainen <tss@iki.fi>
parents:
10837
diff
changeset
|
361 void *context) |
10459
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
362 { |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
363 struct master_login_client *client = context; |
11110
af7beceda361
lib-master: Fixed errors with post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
11108
diff
changeset
|
364 struct master_login_connection *conn = client->conn; |
10459
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
365 struct master_auth_reply reply; |
22420
7ae7c3c159d1
lib-master: Allow userdb to return postlogin socket path.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
366 const char *postlogin_socket_path; |
10459
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
367 |
21389
59437f8764c6
global: Replaced all instances of memset(p, 0, sizeof(*p)) with the new i_zero() macro.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents:
21323
diff
changeset
|
368 i_zero(&reply); |
10459
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
369 reply.tag = client->auth_req.tag; |
11018
2e08ce368bc0
Added support for userdb lookup to fail with a reason (many API changes).
Timo Sirainen <tss@iki.fi>
parents:
10837
diff
changeset
|
370 reply.status = errormsg == NULL ? MASTER_AUTH_STATUS_OK : |
10459
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
371 MASTER_AUTH_STATUS_INTERNAL_ERROR; |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
372 reply.mail_pid = getpid(); |
14681
ca37d1577291
Added o_stream_nsend*() and related functions to make delayed error handling safer.
Timo Sirainen <tss@iki.fi>
parents:
14471
diff
changeset
|
373 o_stream_nsend(conn->output, &reply, sizeof(reply)); |
10459
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
374 |
11018
2e08ce368bc0
Added support for userdb lookup to fail with a reason (many API changes).
Timo Sirainen <tss@iki.fi>
parents:
10837
diff
changeset
|
375 if (errormsg != NULL || auth_args[0] == NULL) { |
2e08ce368bc0
Added support for userdb lookup to fail with a reason (many API changes).
Timo Sirainen <tss@iki.fi>
parents:
10837
diff
changeset
|
376 if (auth_args != NULL) { |
10459
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
377 i_error("login client: Username missing from auth reply"); |
11018
2e08ce368bc0
Added support for userdb lookup to fail with a reason (many API changes).
Timo Sirainen <tss@iki.fi>
parents:
10837
diff
changeset
|
378 errormsg = MASTER_AUTH_ERRMSG_INTERNAL_FAILURE; |
2e08ce368bc0
Added support for userdb lookup to fail with a reason (many API changes).
Timo Sirainen <tss@iki.fi>
parents:
10837
diff
changeset
|
379 } |
11110
af7beceda361
lib-master: Fixed errors with post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
11108
diff
changeset
|
380 conn->login->failure_callback(client, errormsg); |
10597
873b2aff9196
lib-master: Fixed using post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10588
diff
changeset
|
381 master_login_client_free(&client); |
10459
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
382 return; |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
383 } |
15201
d00cf8e0dae7
i_set_failure_prefix() now takes printf-like parameters.
Timo Sirainen <tss@iki.fi>
parents:
15068
diff
changeset
|
384 i_set_failure_prefix("%s(%s): ", client->conn->login->service->name, |
d00cf8e0dae7
i_set_failure_prefix() now takes printf-like parameters.
Timo Sirainen <tss@iki.fi>
parents:
15068
diff
changeset
|
385 auth_args[0]); |
10459
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
386 |
22420
7ae7c3c159d1
lib-master: Allow userdb to return postlogin socket path.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
387 postlogin_socket_path = auth_args_find_postlogin_socket(auth_args); |
7ae7c3c159d1
lib-master: Allow userdb to return postlogin socket path.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
388 if (postlogin_socket_path == NULL) |
7ae7c3c159d1
lib-master: Allow userdb to return postlogin socket path.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
389 postlogin_socket_path = conn->login->postlogin_socket_path; |
7ae7c3c159d1
lib-master: Allow userdb to return postlogin socket path.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
390 |
7ae7c3c159d1
lib-master: Allow userdb to return postlogin socket path.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
391 if (postlogin_socket_path == NULL) |
10459
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
392 master_login_auth_finish(client, auth_args); |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
393 else { |
11110
af7beceda361
lib-master: Fixed errors with post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
11108
diff
changeset
|
394 /* we've sent the reply. the connection is no longer needed, |
af7beceda361
lib-master: Fixed errors with post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
11108
diff
changeset
|
395 so disconnect it (before login process disconnects us and |
af7beceda361
lib-master: Fixed errors with post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
11108
diff
changeset
|
396 logs an error) */ |
af7beceda361
lib-master: Fixed errors with post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
11108
diff
changeset
|
397 master_login_conn_close(conn); |
af7beceda361
lib-master: Fixed errors with post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
11108
diff
changeset
|
398 master_login_conn_unref(&conn); |
af7beceda361
lib-master: Fixed errors with post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
11108
diff
changeset
|
399 |
10459
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
400 /* execute post-login scripts before finishing auth */ |
22420
7ae7c3c159d1
lib-master: Allow userdb to return postlogin socket path.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
401 if (master_login_postlogin(client, auth_args, |
7ae7c3c159d1
lib-master: Allow userdb to return postlogin socket path.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
402 postlogin_socket_path) < 0) |
10597
873b2aff9196
lib-master: Fixed using post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10588
diff
changeset
|
403 master_login_client_free(&client); |
10459
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
404 } |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
405 } |
e9cbc461c525
imap, pop3: Added back ability to run post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10455
diff
changeset
|
406 |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
407 static void master_login_conn_input(struct master_login_connection *conn) |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
408 { |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
409 struct master_auth_request req; |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
410 struct master_login_client *client; |
10199
9d13e9f78d52
lib-master: Fixes to handling master-login services.
Timo Sirainen <tss@iki.fi>
parents:
10194
diff
changeset
|
411 struct master_login *login = conn->login; |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
412 unsigned char data[MASTER_AUTH_MAX_DATA_SIZE]; |
21322
5ab8dc1a4a6f
global: Change string position/length from unsigned int to size_t
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19552
diff
changeset
|
413 size_t i, session_len = 0; |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
414 int ret, client_fd; |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
415 |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
416 ret = master_login_conn_read_request(conn, &req, data, &client_fd); |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
417 if (ret <= 0) { |
11099
b93ae980b66b
lib-master: Login client connection wasn't closed on some error conditions.
Timo Sirainen <tss@iki.fi>
parents:
11096
diff
changeset
|
418 if (ret < 0) { |
b93ae980b66b
lib-master: Login client connection wasn't closed on some error conditions.
Timo Sirainen <tss@iki.fi>
parents:
11096
diff
changeset
|
419 master_login_conn_close(conn); |
b93ae980b66b
lib-master: Login client connection wasn't closed on some error conditions.
Timo Sirainen <tss@iki.fi>
parents:
11096
diff
changeset
|
420 master_login_conn_unref(&conn); |
b93ae980b66b
lib-master: Login client connection wasn't closed on some error conditions.
Timo Sirainen <tss@iki.fi>
parents:
11096
diff
changeset
|
421 } |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
422 if (client_fd != -1) { |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
423 if (close(client_fd) < 0) |
10453
32ad99f146d1
lib-master: Minor error message fixes.
Timo Sirainen <tss@iki.fi>
parents:
10199
diff
changeset
|
424 i_error("close(fd_read client) failed: %m"); |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
425 } |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
426 return; |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
427 } |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
428 fd_close_on_exec(client_fd, TRUE); |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
429 |
14302
5bbcf636bbeb
Added a "session ID" string for imap/pop3 connections, available in %{session} variable.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
430 /* extract the session ID from the request data */ |
5bbcf636bbeb
Added a "session ID" string for imap/pop3 connections, available in %{session} variable.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
431 for (i = 0; i < req.data_size; i++) { |
5bbcf636bbeb
Added a "session ID" string for imap/pop3 connections, available in %{session} variable.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
432 if (data[i] == '\0') { |
5bbcf636bbeb
Added a "session ID" string for imap/pop3 connections, available in %{session} variable.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
433 session_len = i++; |
5bbcf636bbeb
Added a "session ID" string for imap/pop3 connections, available in %{session} variable.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
434 break; |
5bbcf636bbeb
Added a "session ID" string for imap/pop3 connections, available in %{session} variable.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
435 } |
5bbcf636bbeb
Added a "session ID" string for imap/pop3 connections, available in %{session} variable.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
436 } |
5bbcf636bbeb
Added a "session ID" string for imap/pop3 connections, available in %{session} variable.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
437 |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
438 /* @UNSAFE: we have a request. do userdb lookup for it. */ |
14309
d6fda337af15
lib-master: Fixed passing request data from login process.
Timo Sirainen <tss@iki.fi>
parents:
14302
diff
changeset
|
439 req.data_size -= i; |
21323
d223fad9767f
global: Make sure *_malloc() calculations won't cause integer overflows.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21322
diff
changeset
|
440 client = i_malloc(MALLOC_ADD(sizeof(struct master_login_client), req.data_size)); |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
441 client->conn = conn; |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
442 client->fd = client_fd; |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
443 client->auth_req = req; |
18043
fbc969e1543b
lib-master: Removed fixed length limit for session-id.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
444 client->session_id = i_strndup(data, session_len); |
14309
d6fda337af15
lib-master: Fixed passing request data from login process.
Timo Sirainen <tss@iki.fi>
parents:
14302
diff
changeset
|
445 memcpy(client->data, data+i, req.data_size); |
10597
873b2aff9196
lib-master: Fixed using post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10588
diff
changeset
|
446 conn->refcount++; |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
447 |
10199
9d13e9f78d52
lib-master: Fixes to handling master-login services.
Timo Sirainen <tss@iki.fi>
parents:
10194
diff
changeset
|
448 master_login_auth_request(login->auth, &req, |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
449 master_login_auth_callback, client); |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
450 } |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
451 |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
452 void master_login_add(struct master_login *login, int fd) |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
453 { |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
454 struct master_login_connection *conn; |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
455 |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
456 conn = i_new(struct master_login_connection, 1); |
10597
873b2aff9196
lib-master: Fixed using post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10588
diff
changeset
|
457 conn->refcount = 1; |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
458 conn->login = login; |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
459 conn->fd = fd; |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
460 conn->io = io_add(conn->fd, IO_READ, master_login_conn_input, conn); |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
461 conn->output = o_stream_create_fd(fd, (size_t)-1, FALSE); |
14681
ca37d1577291
Added o_stream_nsend*() and related functions to make delayed error handling safer.
Timo Sirainen <tss@iki.fi>
parents:
14471
diff
changeset
|
462 o_stream_set_no_error_handling(conn->output, TRUE); |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
463 |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
464 DLLIST_PREPEND(&login->conns, conn); |
10199
9d13e9f78d52
lib-master: Fixes to handling master-login services.
Timo Sirainen <tss@iki.fi>
parents:
10194
diff
changeset
|
465 |
11102
64bead0067b0
lib-master: Changed post-login process's client counting to make sense again.
Timo Sirainen <tss@iki.fi>
parents:
11099
diff
changeset
|
466 /* NOTE: currently there's a separate connection for each request. */ |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
467 } |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
468 |
11099
b93ae980b66b
lib-master: Login client connection wasn't closed on some error conditions.
Timo Sirainen <tss@iki.fi>
parents:
11096
diff
changeset
|
469 static void master_login_conn_close(struct master_login_connection *conn) |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
470 { |
11104
c2a1163e584f
lib-master: Fixed checking if login connection was already closed.
Timo Sirainen <tss@iki.fi>
parents:
11102
diff
changeset
|
471 if (master_login_conn_is_closed(conn)) |
10813
197d9beec207
lib-master: Fixed crashing when using post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10794
diff
changeset
|
472 return; |
197d9beec207
lib-master: Fixed crashing when using post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10794
diff
changeset
|
473 |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
474 DLLIST_REMOVE(&conn->login->conns, conn); |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
475 |
10199
9d13e9f78d52
lib-master: Fixes to handling master-login services.
Timo Sirainen <tss@iki.fi>
parents:
10194
diff
changeset
|
476 if (conn->io != NULL) |
9d13e9f78d52
lib-master: Fixes to handling master-login services.
Timo Sirainen <tss@iki.fi>
parents:
10194
diff
changeset
|
477 io_remove(&conn->io); |
11096
6aaa6fcba131
lib-master: Crashfix for handling auth master lookup failures.
Timo Sirainen <tss@iki.fi>
parents:
11018
diff
changeset
|
478 o_stream_close(conn->output); |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
479 if (close(conn->fd) < 0) |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
480 i_error("close(master login) failed: %m"); |
10813
197d9beec207
lib-master: Fixed crashing when using post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10794
diff
changeset
|
481 conn->fd = -1; |
10597
873b2aff9196
lib-master: Fixed using post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10588
diff
changeset
|
482 } |
873b2aff9196
lib-master: Fixed using post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10588
diff
changeset
|
483 |
873b2aff9196
lib-master: Fixed using post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10588
diff
changeset
|
484 static void master_login_conn_unref(struct master_login_connection **_conn) |
873b2aff9196
lib-master: Fixed using post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10588
diff
changeset
|
485 { |
873b2aff9196
lib-master: Fixed using post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10588
diff
changeset
|
486 struct master_login_connection *conn = *_conn; |
873b2aff9196
lib-master: Fixed using post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10588
diff
changeset
|
487 |
873b2aff9196
lib-master: Fixed using post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10588
diff
changeset
|
488 i_assert(conn->refcount > 0); |
873b2aff9196
lib-master: Fixed using post-login scripts.
Timo Sirainen <tss@iki.fi>
parents:
10588
diff
changeset
|
489 |
11096
6aaa6fcba131
lib-master: Crashfix for handling auth master lookup failures.
Timo Sirainen <tss@iki.fi>
parents:
11018
diff
changeset
|
490 if (--conn->refcount > 0) |
6aaa6fcba131
lib-master: Crashfix for handling auth master lookup failures.
Timo Sirainen <tss@iki.fi>
parents:
11018
diff
changeset
|
491 return; |
6aaa6fcba131
lib-master: Crashfix for handling auth master lookup failures.
Timo Sirainen <tss@iki.fi>
parents:
11018
diff
changeset
|
492 |
6aaa6fcba131
lib-master: Crashfix for handling auth master lookup failures.
Timo Sirainen <tss@iki.fi>
parents:
11018
diff
changeset
|
493 *_conn = NULL; |
11099
b93ae980b66b
lib-master: Login client connection wasn't closed on some error conditions.
Timo Sirainen <tss@iki.fi>
parents:
11096
diff
changeset
|
494 master_login_conn_close(conn); |
11096
6aaa6fcba131
lib-master: Crashfix for handling auth master lookup failures.
Timo Sirainen <tss@iki.fi>
parents:
11018
diff
changeset
|
495 o_stream_unref(&conn->output); |
11107
c0fe14f76760
lib-master: Client connection counting fix.
Timo Sirainen <tss@iki.fi>
parents:
11104
diff
changeset
|
496 |
c0fe14f76760
lib-master: Client connection counting fix.
Timo Sirainen <tss@iki.fi>
parents:
11104
diff
changeset
|
497 if (!conn->login_success) |
c0fe14f76760
lib-master: Client connection counting fix.
Timo Sirainen <tss@iki.fi>
parents:
11104
diff
changeset
|
498 master_service_client_connection_destroyed(conn->login->service); |
11096
6aaa6fcba131
lib-master: Crashfix for handling auth master lookup failures.
Timo Sirainen <tss@iki.fi>
parents:
11018
diff
changeset
|
499 i_free(conn); |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
500 } |
10473
a0d99b374aa4
imap, pop3: Close auth/config connections when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10459
diff
changeset
|
501 |
a0d99b374aa4
imap, pop3: Close auth/config connections when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10459
diff
changeset
|
502 void master_login_stop(struct master_login *login) |
a0d99b374aa4
imap, pop3: Close auth/config connections when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10459
diff
changeset
|
503 { |
a0d99b374aa4
imap, pop3: Close auth/config connections when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10459
diff
changeset
|
504 login->stopping = TRUE; |
a0d99b374aa4
imap, pop3: Close auth/config connections when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10459
diff
changeset
|
505 if (master_login_auth_request_count(login->auth) == 0) { |
a0d99b374aa4
imap, pop3: Close auth/config connections when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10459
diff
changeset
|
506 master_login_auth_disconnect(login->auth); |
a0d99b374aa4
imap, pop3: Close auth/config connections when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10459
diff
changeset
|
507 master_service_close_config_fd(login->service); |
a0d99b374aa4
imap, pop3: Close auth/config connections when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10459
diff
changeset
|
508 } |
a0d99b374aa4
imap, pop3: Close auth/config connections when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10459
diff
changeset
|
509 } |