annotate src/login-common/login-proxy-state.c @ 22310:a28f5bfb15fc

fts: Do not attempt to deinitialize backend if it's not set If FTS backend initialization fails or does not happen, flist->backend might end up being NULL, and attempt to deinitialize NULL won't end well.
author Aki Tuomi <aki.tuomi@dovecot.fi>
date Wed, 17 May 2017 12:26:42 +0300
parents 2e2563132d5f
children cb108f786fb4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 */
9776
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3 #include "lib.h"
15187
02451e967a06 Renamed network.[ch] to net.[ch].
Timo Sirainen <tss@iki.fi>
parents: 14918
diff changeset
4 #include "net.h"
14305
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
5 #include "ioloop.h"
9776
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
6 #include "hash.h"
11324
c872378a8de6 login proxy: If passdb returns proxy_refresh=<secs>, send username to proxy-notify fifo every n secs.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
7 #include "strescape.h"
11817
65cda5124e99 login proxy: Set notify fd nonblocking.
Timo Sirainen <tss@iki.fi>
parents: 11334
diff changeset
8 #include "fd-set-nonblock.h"
9776
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
9 #include "login-proxy-state.h"
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
10
11324
c872378a8de6 login proxy: If passdb returns proxy_refresh=<secs>, send username to proxy-notify fifo every n secs.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
11 #include <unistd.h>
c872378a8de6 login proxy: If passdb returns proxy_refresh=<secs>, send username to proxy-notify fifo every n secs.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
12 #include <fcntl.h>
c872378a8de6 login proxy: If passdb returns proxy_refresh=<secs>, send username to proxy-notify fifo every n secs.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
13
14305
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
14 #define NOTIFY_RETRY_REOPEN_MSECS (60*1000)
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
15
9776
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
16 struct login_proxy_state {
14918
8eae4e205c82 Hash table API is now (mostly) type safe.
Timo Sirainen <tss@iki.fi>
parents: 14917
diff changeset
17 HASH_TABLE(struct login_proxy_record *,
8eae4e205c82 Hash table API is now (mostly) type safe.
Timo Sirainen <tss@iki.fi>
parents: 14917
diff changeset
18 struct login_proxy_record *) hash;
9776
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
19 pool_t pool;
11324
c872378a8de6 login proxy: If passdb returns proxy_refresh=<secs>, send username to proxy-notify fifo every n secs.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
20
c872378a8de6 login proxy: If passdb returns proxy_refresh=<secs>, send username to proxy-notify fifo every n secs.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
21 const char *notify_path;
c872378a8de6 login proxy: If passdb returns proxy_refresh=<secs>, send username to proxy-notify fifo every n secs.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
22 int notify_fd;
11328
0877d6920960 login: Don't log an error at startup if proxy-notify fifo hasn't been enabled.
Timo Sirainen <tss@iki.fi>
parents: 11324
diff changeset
23
14305
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
24 struct timeout *to_reopen;
9776
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
25 };
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
26
14305
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
27 static int login_proxy_state_notify_open(struct login_proxy_state *state);
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
28
14918
8eae4e205c82 Hash table API is now (mostly) type safe.
Timo Sirainen <tss@iki.fi>
parents: 14917
diff changeset
29 static unsigned int
8eae4e205c82 Hash table API is now (mostly) type safe.
Timo Sirainen <tss@iki.fi>
parents: 14917
diff changeset
30 login_proxy_record_hash(const struct login_proxy_record *rec)
9776
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
31 {
10087
b3c3675ba466 imap/pop3 proxy: Track "destination down" state separately for IP+ports, not just IPs.
Timo Sirainen <tss@iki.fi>
parents: 9776
diff changeset
32 return net_ip_hash(&rec->ip) ^ rec->port;
9776
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
33 }
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
34
14918
8eae4e205c82 Hash table API is now (mostly) type safe.
Timo Sirainen <tss@iki.fi>
parents: 14917
diff changeset
35 static int login_proxy_record_cmp(struct login_proxy_record *rec1,
8eae4e205c82 Hash table API is now (mostly) type safe.
Timo Sirainen <tss@iki.fi>
parents: 14917
diff changeset
36 struct login_proxy_record *rec2)
9776
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
37 {
10087
b3c3675ba466 imap/pop3 proxy: Track "destination down" state separately for IP+ports, not just IPs.
Timo Sirainen <tss@iki.fi>
parents: 9776
diff changeset
38 if (!net_ip_compare(&rec1->ip, &rec2->ip))
b3c3675ba466 imap/pop3 proxy: Track "destination down" state separately for IP+ports, not just IPs.
Timo Sirainen <tss@iki.fi>
parents: 9776
diff changeset
39 return 1;
b3c3675ba466 imap/pop3 proxy: Track "destination down" state separately for IP+ports, not just IPs.
Timo Sirainen <tss@iki.fi>
parents: 9776
diff changeset
40
b3c3675ba466 imap/pop3 proxy: Track "destination down" state separately for IP+ports, not just IPs.
Timo Sirainen <tss@iki.fi>
parents: 9776
diff changeset
41 return (int)rec1->port - (int)rec2->port;
9776
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
42 }
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
43
11324
c872378a8de6 login proxy: If passdb returns proxy_refresh=<secs>, send username to proxy-notify fifo every n secs.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
44 struct login_proxy_state *login_proxy_state_init(const char *notify_path)
9776
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
45 {
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
46 struct login_proxy_state *state;
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
47
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
48 state = i_new(struct login_proxy_state, 1);
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
49 state->pool = pool_alloconly_create("login proxy state", 1024);
14918
8eae4e205c82 Hash table API is now (mostly) type safe.
Timo Sirainen <tss@iki.fi>
parents: 14917
diff changeset
50 hash_table_create(&state->hash, state->pool, 0,
8eae4e205c82 Hash table API is now (mostly) type safe.
Timo Sirainen <tss@iki.fi>
parents: 14917
diff changeset
51 login_proxy_record_hash, login_proxy_record_cmp);
11328
0877d6920960 login: Don't log an error at startup if proxy-notify fifo hasn't been enabled.
Timo Sirainen <tss@iki.fi>
parents: 11324
diff changeset
52 state->notify_path = p_strdup(state->pool, notify_path);
0877d6920960 login: Don't log an error at startup if proxy-notify fifo hasn't been enabled.
Timo Sirainen <tss@iki.fi>
parents: 11324
diff changeset
53 state->notify_fd = -1;
9776
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
54 return state;
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
55 }
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
56
14305
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
57 static void login_proxy_state_close(struct login_proxy_state *state)
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
58 {
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
59 if (state->notify_fd != -1) {
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
60 if (close(state->notify_fd) < 0)
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
61 i_error("close(%s) failed: %m", state->notify_path);
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
62 state->notify_fd = -1;
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
63 }
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
64 }
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
65
9776
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
66 void login_proxy_state_deinit(struct login_proxy_state **_state)
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
67 {
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
68 struct login_proxy_state *state = *_state;
19086
c98fbc17fa4e login proxy: Added asserts to track that num_waiting_connections are correct.
Timo Sirainen <tss@iki.fi>
parents: 19035
diff changeset
69 struct hash_iterate_context *iter;
c98fbc17fa4e login proxy: Added asserts to track that num_waiting_connections are correct.
Timo Sirainen <tss@iki.fi>
parents: 19035
diff changeset
70 struct login_proxy_record *rec;
9776
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
71
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
72 *_state = NULL;
11324
c872378a8de6 login proxy: If passdb returns proxy_refresh=<secs>, send username to proxy-notify fifo every n secs.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
73
19086
c98fbc17fa4e login proxy: Added asserts to track that num_waiting_connections are correct.
Timo Sirainen <tss@iki.fi>
parents: 19035
diff changeset
74 /* sanity check: */
c98fbc17fa4e login proxy: Added asserts to track that num_waiting_connections are correct.
Timo Sirainen <tss@iki.fi>
parents: 19035
diff changeset
75 iter = hash_table_iterate_init(state->hash);
c98fbc17fa4e login proxy: Added asserts to track that num_waiting_connections are correct.
Timo Sirainen <tss@iki.fi>
parents: 19035
diff changeset
76 while (hash_table_iterate(iter, state->hash, &rec, &rec))
c98fbc17fa4e login proxy: Added asserts to track that num_waiting_connections are correct.
Timo Sirainen <tss@iki.fi>
parents: 19035
diff changeset
77 i_assert(rec->num_waiting_connections == 0);
c98fbc17fa4e login proxy: Added asserts to track that num_waiting_connections are correct.
Timo Sirainen <tss@iki.fi>
parents: 19035
diff changeset
78 hash_table_iterate_deinit(&iter);
c98fbc17fa4e login proxy: Added asserts to track that num_waiting_connections are correct.
Timo Sirainen <tss@iki.fi>
parents: 19035
diff changeset
79
14305
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
80 if (state->to_reopen != NULL)
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
81 timeout_remove(&state->to_reopen);
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
82 login_proxy_state_close(state);
9776
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
83 hash_table_destroy(&state->hash);
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
84 pool_unref(&state->pool);
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
85 i_free(state);
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
86 }
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
87
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
88 struct login_proxy_record *
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
89 login_proxy_state_get(struct login_proxy_state *state,
19035
aabfe48db1cf Changed type of internet port values to in_port_t everywhere.
Stephan Bosch <stephan@rename-it.nl>
parents: 18137
diff changeset
90 const struct ip_addr *ip, in_port_t port)
9776
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
91 {
10087
b3c3675ba466 imap/pop3 proxy: Track "destination down" state separately for IP+ports, not just IPs.
Timo Sirainen <tss@iki.fi>
parents: 9776
diff changeset
92 struct login_proxy_record *rec, key;
9776
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
93
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: 21322
diff changeset
94 i_zero(&key);
10087
b3c3675ba466 imap/pop3 proxy: Track "destination down" state separately for IP+ports, not just IPs.
Timo Sirainen <tss@iki.fi>
parents: 9776
diff changeset
95 key.ip = *ip;
b3c3675ba466 imap/pop3 proxy: Track "destination down" state separately for IP+ports, not just IPs.
Timo Sirainen <tss@iki.fi>
parents: 9776
diff changeset
96 key.port = port;
b3c3675ba466 imap/pop3 proxy: Track "destination down" state separately for IP+ports, not just IPs.
Timo Sirainen <tss@iki.fi>
parents: 9776
diff changeset
97
b3c3675ba466 imap/pop3 proxy: Track "destination down" state separately for IP+ports, not just IPs.
Timo Sirainen <tss@iki.fi>
parents: 9776
diff changeset
98 rec = hash_table_lookup(state->hash, &key);
9776
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
99 if (rec == NULL) {
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
100 rec = p_new(state->pool, struct login_proxy_record, 1);
10087
b3c3675ba466 imap/pop3 proxy: Track "destination down" state separately for IP+ports, not just IPs.
Timo Sirainen <tss@iki.fi>
parents: 9776
diff changeset
101 rec->ip = *ip;
b3c3675ba466 imap/pop3 proxy: Track "destination down" state separately for IP+ports, not just IPs.
Timo Sirainen <tss@iki.fi>
parents: 9776
diff changeset
102 rec->port = port;
b3c3675ba466 imap/pop3 proxy: Track "destination down" state separately for IP+ports, not just IPs.
Timo Sirainen <tss@iki.fi>
parents: 9776
diff changeset
103 hash_table_insert(state->hash, rec, rec);
9776
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
104 }
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
105 return rec;
e27785694615 login proxy: And added new files missing from previous commit.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
106 }
11324
c872378a8de6 login proxy: If passdb returns proxy_refresh=<secs>, send username to proxy-notify fifo every n secs.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
107
14305
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
108 static void login_proxy_state_reopen(struct login_proxy_state *state)
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
109 {
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
110 timeout_remove(&state->to_reopen);
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
111 (void)login_proxy_state_notify_open(state);
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
112 }
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
113
11328
0877d6920960 login: Don't log an error at startup if proxy-notify fifo hasn't been enabled.
Timo Sirainen <tss@iki.fi>
parents: 11324
diff changeset
114 static int login_proxy_state_notify_open(struct login_proxy_state *state)
0877d6920960 login: Don't log an error at startup if proxy-notify fifo hasn't been enabled.
Timo Sirainen <tss@iki.fi>
parents: 11324
diff changeset
115 {
14305
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
116 if (state->to_reopen != NULL) {
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
117 /* reopen later */
11328
0877d6920960 login: Don't log an error at startup if proxy-notify fifo hasn't been enabled.
Timo Sirainen <tss@iki.fi>
parents: 11324
diff changeset
118 return -1;
14305
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
119 }
11328
0877d6920960 login: Don't log an error at startup if proxy-notify fifo hasn't been enabled.
Timo Sirainen <tss@iki.fi>
parents: 11324
diff changeset
120
0877d6920960 login: Don't log an error at startup if proxy-notify fifo hasn't been enabled.
Timo Sirainen <tss@iki.fi>
parents: 11324
diff changeset
121 state->notify_fd = open(state->notify_path, O_WRONLY);
0877d6920960 login: Don't log an error at startup if proxy-notify fifo hasn't been enabled.
Timo Sirainen <tss@iki.fi>
parents: 11324
diff changeset
122 if (state->notify_fd == -1) {
14305
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
123 i_error("open(%s) failed: %m", state->notify_path);
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
124 state->to_reopen = timeout_add(NOTIFY_RETRY_REOPEN_MSECS,
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
125 login_proxy_state_reopen, state);
11328
0877d6920960 login: Don't log an error at startup if proxy-notify fifo hasn't been enabled.
Timo Sirainen <tss@iki.fi>
parents: 11324
diff changeset
126 return -1;
0877d6920960 login: Don't log an error at startup if proxy-notify fifo hasn't been enabled.
Timo Sirainen <tss@iki.fi>
parents: 11324
diff changeset
127 }
11817
65cda5124e99 login proxy: Set notify fd nonblocking.
Timo Sirainen <tss@iki.fi>
parents: 11334
diff changeset
128 fd_set_nonblock(state->notify_fd, TRUE);
11328
0877d6920960 login: Don't log an error at startup if proxy-notify fifo hasn't been enabled.
Timo Sirainen <tss@iki.fi>
parents: 11324
diff changeset
129 return 0;
0877d6920960 login: Don't log an error at startup if proxy-notify fifo hasn't been enabled.
Timo Sirainen <tss@iki.fi>
parents: 11324
diff changeset
130 }
0877d6920960 login: Don't log an error at startup if proxy-notify fifo hasn't been enabled.
Timo Sirainen <tss@iki.fi>
parents: 11324
diff changeset
131
14305
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
132 static bool login_proxy_state_try_notify(struct login_proxy_state *state,
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
133 const char *user)
11324
c872378a8de6 login proxy: If passdb returns proxy_refresh=<secs>, send username to proxy-notify fifo every n secs.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
134 {
21322
5ab8dc1a4a6f global: Change string position/length from unsigned int to size_t
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20735
diff changeset
135 size_t len;
11324
c872378a8de6 login proxy: If passdb returns proxy_refresh=<secs>, send username to proxy-notify fifo every n secs.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
136 ssize_t ret;
c872378a8de6 login proxy: If passdb returns proxy_refresh=<secs>, send username to proxy-notify fifo every n secs.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
137
11328
0877d6920960 login: Don't log an error at startup if proxy-notify fifo hasn't been enabled.
Timo Sirainen <tss@iki.fi>
parents: 11324
diff changeset
138 if (state->notify_fd == -1) {
0877d6920960 login: Don't log an error at startup if proxy-notify fifo hasn't been enabled.
Timo Sirainen <tss@iki.fi>
parents: 11324
diff changeset
139 if (login_proxy_state_notify_open(state) < 0)
14305
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
140 return TRUE;
20735
ad61b4f88130 Added asserts to make static analyzer happier.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
141 i_assert(state->notify_fd != -1);
11328
0877d6920960 login: Don't log an error at startup if proxy-notify fifo hasn't been enabled.
Timo Sirainen <tss@iki.fi>
parents: 11324
diff changeset
142 }
11324
c872378a8de6 login proxy: If passdb returns proxy_refresh=<secs>, send username to proxy-notify fifo every n secs.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
143
c872378a8de6 login proxy: If passdb returns proxy_refresh=<secs>, send username to proxy-notify fifo every n secs.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
144 T_BEGIN {
c872378a8de6 login proxy: If passdb returns proxy_refresh=<secs>, send username to proxy-notify fifo every n secs.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
145 const char *cmd;
c872378a8de6 login proxy: If passdb returns proxy_refresh=<secs>, send username to proxy-notify fifo every n secs.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
146
c872378a8de6 login proxy: If passdb returns proxy_refresh=<secs>, send username to proxy-notify fifo every n secs.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
147 cmd = t_strconcat(str_tabescape(user), "\n", NULL);
c872378a8de6 login proxy: If passdb returns proxy_refresh=<secs>, send username to proxy-notify fifo every n secs.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
148 len = strlen(cmd);
c872378a8de6 login proxy: If passdb returns proxy_refresh=<secs>, send username to proxy-notify fifo every n secs.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
149 ret = write(state->notify_fd, cmd, len);
c872378a8de6 login proxy: If passdb returns proxy_refresh=<secs>, send username to proxy-notify fifo every n secs.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
150 } T_END;
c872378a8de6 login proxy: If passdb returns proxy_refresh=<secs>, send username to proxy-notify fifo every n secs.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
151
11334
d6d59ff58511 Compiler warning fixes.
Timo Sirainen <tss@iki.fi>
parents: 11328
diff changeset
152 if (ret != (ssize_t)len) {
11324
c872378a8de6 login proxy: If passdb returns proxy_refresh=<secs>, send username to proxy-notify fifo every n secs.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
153 if (ret < 0)
c872378a8de6 login proxy: If passdb returns proxy_refresh=<secs>, send username to proxy-notify fifo every n secs.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
154 i_error("write(%s) failed: %m", state->notify_path);
c872378a8de6 login proxy: If passdb returns proxy_refresh=<secs>, send username to proxy-notify fifo every n secs.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
155 else {
c872378a8de6 login proxy: If passdb returns proxy_refresh=<secs>, send username to proxy-notify fifo every n secs.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
156 i_error("write(%s) wrote partial update",
c872378a8de6 login proxy: If passdb returns proxy_refresh=<secs>, send username to proxy-notify fifo every n secs.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
157 state->notify_path);
c872378a8de6 login proxy: If passdb returns proxy_refresh=<secs>, send username to proxy-notify fifo every n secs.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
158 }
14305
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
159 login_proxy_state_close(state);
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
160 /* retry sending */
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
161 return FALSE;
11324
c872378a8de6 login proxy: If passdb returns proxy_refresh=<secs>, send username to proxy-notify fifo every n secs.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
162 }
14305
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
163 return TRUE;
11324
c872378a8de6 login proxy: If passdb returns proxy_refresh=<secs>, send username to proxy-notify fifo every n secs.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
164 }
14305
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
165
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
166 void login_proxy_state_notify(struct login_proxy_state *state,
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
167 const char *user)
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
168 {
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
169 if (!login_proxy_state_try_notify(state, user))
14682
d0d7b810646b Make sure we check all the functions' return values. Minor API changes to simplify this.
Timo Sirainen <tss@iki.fi>
parents: 14305
diff changeset
170 (void)login_proxy_state_try_notify(state, user);
14305
94de7605f50f login proxy: Handle proxy-notify errors better.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
171 }