Mercurial > dovecot > core-2.2
annotate src/imap-urlauth/imap-urlauth-worker.c @ 21671:b4dd0868ecc0
global: Replace mail_storage_service_user_free() with _unref()
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Wed, 22 Feb 2017 13:30:00 +0200 |
parents | 22f45b987ad6 |
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) 2013-2017 Dovecot authors, see the included COPYING file */ |
15066
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
2 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
3 #include "lib.h" |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
4 #include "array.h" |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
5 #include "ioloop.h" |
15187
02451e967a06
Renamed network.[ch] to net.[ch].
Timo Sirainen <tss@iki.fi>
parents:
15078
diff
changeset
|
6 #include "net.h" |
15066
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
7 #include "fdpass.h" |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
8 #include "istream.h" |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
9 #include "ostream.h" |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
10 #include "str.h" |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
11 #include "str-sanitize.h" |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
12 #include "strescape.h" |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
13 #include "llist.h" |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
14 #include "hostpid.h" |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
15 #include "var-expand.h" |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
16 #include "process-title.h" |
15227
70ca88e74a4b
Moved random_init() from lib-imap-urlauth to imap/imap-urlauth main().
Timo Sirainen <tss@iki.fi>
parents:
15225
diff
changeset
|
17 #include "randgen.h" |
15066
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
18 #include "restrict-access.h" |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
19 #include "settings-parser.h" |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
20 #include "master-service.h" |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
21 #include "master-interface.h" |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
22 #include "mail-storage.h" |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
23 #include "mail-storage-service.h" |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
24 #include "mail-namespace.h" |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
25 #include "imap-url.h" |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
26 #include "imap-msgpart-url.h" |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
27 #include "imap-urlauth.h" |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
28 #include "imap-urlauth-fetch.h" |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
29 #include "imap-urlauth-worker-settings.h" |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
30 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
31 #include <unistd.h> |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
32 #include <sysexits.h> |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
33 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
34 #define MAX_CTRL_HANDSHAKE 255 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
35 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
36 /* max. length of input lines (URLs) */ |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
37 #define MAX_INBUF_SIZE 2048 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
38 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
39 /* Disconnect client after idling this many milliseconds */ |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
40 #define CLIENT_IDLE_TIMEOUT_MSECS (10*60*1000) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
41 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
42 #define IS_STANDALONE() \ |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
43 (getenv(MASTER_IS_PARENT_ENV) == NULL) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
44 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
45 #define IMAP_URLAUTH_WORKER_PROTOCOL_MAJOR_VERSION 1 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
46 #define IMAP_URLAUTH_WORKER_PROTOCOL_MINOR_VERSION 0 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
47 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
48 struct client { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
49 struct client *prev, *next; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
50 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
51 int fd_in, fd_out, fd_ctrl; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
52 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
53 struct io *io, *ctrl_io; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
54 struct istream *input, *ctrl_input; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
55 struct ostream *output, *ctrl_output; |
16324
2a3134b0c25d
imap-urlauth-worker: Fixed a crash (by removing unnecessary code)
Timo Sirainen <tss@iki.fi>
parents:
16303
diff
changeset
|
56 struct timeout *to_idle; |
15066
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
57 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
58 char *access_user; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
59 ARRAY_TYPE(string) access_apps; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
60 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
61 struct mail_storage_service_user *service_user; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
62 struct mail_user *mail_user; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
63 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
64 struct imap_urlauth_context *urlauth_ctx; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
65 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
66 struct imap_msgpart_url *url; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
67 struct istream *msg_part_input; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
68 uoff_t msg_part_size; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
69 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
70 /* settings: */ |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
71 const struct imap_urlauth_worker_settings *set; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
72 const struct mail_storage_settings *mail_set; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
73 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
74 unsigned int debug:1; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
75 unsigned int finished:1; |
15076
7e1f0146169f
imap-urlauth: Fixes to handling anonymous user
Stephan Bosch <stephan@rename-it.nl>
parents:
15066
diff
changeset
|
76 unsigned int waiting_input:1; |
15066
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
77 unsigned int version_received:1; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
78 unsigned int access_received:1; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
79 unsigned int access_anonymous:1; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
80 }; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
81 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
82 static bool verbose_proctitle = FALSE; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
83 static struct mail_storage_service_ctx *storage_service; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
84 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
85 struct client *imap_urlauth_worker_clients; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
86 unsigned int imap_urlauth_worker_client_count; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
87 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
88 static void client_destroy(struct client *client); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
89 static void client_abort(struct client *client, const char *reason); |
15078
dc1db2eedbb1
imap-urlauth: Fixed crashes when destroying client
Stephan Bosch <stephan@rename-it.nl>
parents:
15077
diff
changeset
|
90 static int client_run_url(struct client *client); |
15066
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
91 static void client_input(struct client *client); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
92 static bool client_handle_input(struct client *client); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
93 static int client_output(struct client *client); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
94 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
95 static void client_ctrl_input(struct client *client); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
96 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
97 static void imap_urlauth_worker_refresh_proctitle(void) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
98 { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
99 struct client *client = imap_urlauth_worker_clients; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
100 string_t *title; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
101 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
102 if (!verbose_proctitle) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
103 return; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
104 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
105 title = t_str_new(128); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
106 str_append_c(title, '['); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
107 switch (imap_urlauth_worker_client_count) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
108 case 0: |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
109 str_append(title, "idling"); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
110 break; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
111 case 1: |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
112 if (client->mail_user == NULL) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
113 str_append(title, client->access_user); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
114 else { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
115 str_append(title, client->access_user); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
116 str_append(title, "->"); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
117 str_append(title, client->mail_user->username); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
118 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
119 break; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
120 default: |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
121 str_printfa(title, "%u connections", |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
122 imap_urlauth_worker_client_count); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
123 break; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
124 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
125 str_append_c(title, ']'); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
126 process_title_set(str_c(title)); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
127 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
128 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
129 static void client_idle_timeout(struct client *client) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
130 { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
131 if (client->url != NULL) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
132 client_abort(client, |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
133 "Session closed for inactivity in reading our output"); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
134 } else { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
135 client_destroy(client); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
136 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
137 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
138 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
139 static struct client *client_create(int fd) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
140 { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
141 struct client *client; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
142 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
143 /* always use nonblocking I/O */ |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
144 net_set_nonblock(fd, TRUE); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
145 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
146 client = i_new(struct client, 1); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
147 i_array_init(&client->access_apps, 16); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
148 client->fd_in = -1; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
149 client->fd_out = -1; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
150 client->fd_ctrl = fd; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
151 client->access_anonymous = TRUE; /* default until overridden */ |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
152 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
153 client->ctrl_io = io_add(fd, IO_READ, client_ctrl_input, client); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
154 client->to_idle = timeout_add(CLIENT_IDLE_TIMEOUT_MSECS, |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
155 client_idle_timeout, client); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
156 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
157 imap_urlauth_worker_client_count++; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
158 DLLIST_PREPEND(&imap_urlauth_worker_clients, client); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
159 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
160 imap_urlauth_worker_refresh_proctitle(); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
161 return client; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
162 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
163 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
164 static struct client * |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
165 client_create_standalone(const char *access_user, |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
166 const char *const *access_applications, |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
167 int fd_in, int fd_out, bool debug) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
168 { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
169 struct client *client; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
170 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
171 /* always use nonblocking I/O */ |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
172 net_set_nonblock(fd_in, TRUE); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
173 net_set_nonblock(fd_out, TRUE); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
174 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
175 client = i_new(struct client, 1); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
176 i_array_init(&client->access_apps, 16); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
177 client->fd_in = fd_in; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
178 client->fd_out = fd_out; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
179 client->fd_ctrl = -1; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
180 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
181 if (access_user != NULL && *access_user != '\0') |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
182 client->access_user = i_strdup(access_user); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
183 else { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
184 client->access_user = i_strdup("anonymous"); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
185 client->access_anonymous = TRUE; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
186 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
187 if (access_applications != NULL) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
188 const char *const *apps = access_applications; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
189 for (; *apps != NULL; apps++) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
190 char *app = i_strdup(*apps); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
191 array_append(&client->access_apps, &app, 1); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
192 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
193 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
194 client->debug = debug; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
195 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
196 client->input = i_stream_create_fd(fd_in, MAX_INBUF_SIZE, FALSE); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
197 client->output = o_stream_create_fd(fd_out, (size_t)-1, FALSE); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
198 client->io = io_add(fd_in, IO_READ, client_input, client); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
199 client->to_idle = timeout_add(CLIENT_IDLE_TIMEOUT_MSECS, |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
200 client_idle_timeout, client); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
201 o_stream_set_flush_callback(client->output, client_output, client); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
202 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
203 imap_urlauth_worker_client_count++; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
204 DLLIST_PREPEND(&imap_urlauth_worker_clients, client); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
205 |
15201
d00cf8e0dae7
i_set_failure_prefix() now takes printf-like parameters.
Timo Sirainen <tss@iki.fi>
parents:
15187
diff
changeset
|
206 i_set_failure_prefix("imap-urlauth[%s](%s): ", |
d00cf8e0dae7
i_set_failure_prefix() now takes printf-like parameters.
Timo Sirainen <tss@iki.fi>
parents:
15187
diff
changeset
|
207 my_pid, client->access_user); |
15066
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
208 return client; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
209 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
210 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
211 static void client_abort(struct client *client, const char *reason) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
212 { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
213 i_error("%s", reason); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
214 client_destroy(client); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
215 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
216 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
217 static void client_destroy(struct client *client) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
218 { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
219 char **app; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
220 |
15201
d00cf8e0dae7
i_set_failure_prefix() now takes printf-like parameters.
Timo Sirainen <tss@iki.fi>
parents:
15187
diff
changeset
|
221 i_set_failure_prefix("imap-urlauth[%s](%s): ", |
d00cf8e0dae7
i_set_failure_prefix() now takes printf-like parameters.
Timo Sirainen <tss@iki.fi>
parents:
15187
diff
changeset
|
222 my_pid, client->access_user); |
15066
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
223 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
224 if (client->url != NULL) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
225 /* deinitialize url */ |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
226 i_stream_close(client->input); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
227 o_stream_close(client->output); |
15078
dc1db2eedbb1
imap-urlauth: Fixed crashes when destroying client
Stephan Bosch <stephan@rename-it.nl>
parents:
15077
diff
changeset
|
228 (void)client_run_url(client); |
15066
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
229 i_assert(client->url == NULL); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
230 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
231 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
232 imap_urlauth_worker_client_count--; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
233 DLLIST_REMOVE(&imap_urlauth_worker_clients, client); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
234 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
235 if (client->urlauth_ctx != NULL) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
236 imap_urlauth_deinit(&client->urlauth_ctx); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
237 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
238 if (client->mail_user != NULL) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
239 mail_user_unref(&client->mail_user); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
240 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
241 if (client->io != NULL) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
242 io_remove(&client->io); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
243 if (client->ctrl_io != NULL) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
244 io_remove(&client->ctrl_io); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
245 if (client->to_idle != NULL) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
246 timeout_remove(&client->to_idle); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
247 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
248 if (client->input != NULL) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
249 i_stream_destroy(&client->input); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
250 if (client->output != NULL) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
251 o_stream_destroy(&client->output); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
252 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
253 if (client->ctrl_input != NULL) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
254 i_stream_destroy(&client->ctrl_input); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
255 if (client->ctrl_output != NULL) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
256 o_stream_destroy(&client->ctrl_output); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
257 |
21118
ac02caa662f2
global: Use fd_close_maybe_stdio()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19552
diff
changeset
|
258 fd_close_maybe_stdio(&client->fd_in, &client->fd_out); |
15066
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
259 if (client->fd_ctrl >= 0) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
260 net_disconnect(client->fd_ctrl); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
261 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
262 if (client->service_user != NULL) |
21671
b4dd0868ecc0
global: Replace mail_storage_service_user_free() with _unref()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21517
diff
changeset
|
263 mail_storage_service_user_unref(&client->service_user); |
15066
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
264 i_free(client->access_user); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
265 array_foreach_modifiable(&client->access_apps, app) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
266 i_free(*app); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
267 array_free(&client->access_apps); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
268 i_free(client); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
269 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
270 imap_urlauth_worker_refresh_proctitle(); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
271 master_service_client_connection_destroyed(master_service); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
272 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
273 |
15078
dc1db2eedbb1
imap-urlauth: Fixed crashes when destroying client
Stephan Bosch <stephan@rename-it.nl>
parents:
15077
diff
changeset
|
274 static int client_run_url(struct client *client) |
15066
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
275 { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
276 const unsigned char *data; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
277 size_t size; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
278 ssize_t ret = 0; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
279 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
280 while (i_stream_read_data(client->msg_part_input, &data, &size, 0) > 0) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
281 if ((ret = o_stream_send(client->output, data, size)) < 0) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
282 break; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
283 i_stream_skip(client->msg_part_input, ret); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
284 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
285 if (o_stream_get_buffer_used_size(client->output) >= 4096) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
286 if ((ret = o_stream_flush(client->output)) < 0) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
287 break; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
288 if (ret == 0) |
15078
dc1db2eedbb1
imap-urlauth: Fixed crashes when destroying client
Stephan Bosch <stephan@rename-it.nl>
parents:
15077
diff
changeset
|
289 return 0; |
15066
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
290 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
291 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
292 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
293 if (client->output->closed || ret < 0) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
294 imap_msgpart_url_free(&client->url); |
15078
dc1db2eedbb1
imap-urlauth: Fixed crashes when destroying client
Stephan Bosch <stephan@rename-it.nl>
parents:
15077
diff
changeset
|
295 return -1; |
15066
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
296 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
297 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
298 if (client->msg_part_input->eof) { |
21517
22f45b987ad6
global: Ignore unnecessary return values.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
299 (void)o_stream_send(client->output, "\n", 1); |
15066
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
300 imap_msgpart_url_free(&client->url); |
15078
dc1db2eedbb1
imap-urlauth: Fixed crashes when destroying client
Stephan Bosch <stephan@rename-it.nl>
parents:
15077
diff
changeset
|
301 return 1; |
15066
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
302 } |
15078
dc1db2eedbb1
imap-urlauth: Fixed crashes when destroying client
Stephan Bosch <stephan@rename-it.nl>
parents:
15077
diff
changeset
|
303 return 0; |
15066
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
304 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
305 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
306 static void clients_destroy_all(void) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
307 { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
308 while (imap_urlauth_worker_clients != NULL) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
309 client_destroy(imap_urlauth_worker_clients); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
310 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
311 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
312 static void ATTR_FORMAT(2, 3) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
313 client_send_line(struct client *client, const char *fmt, ...) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
314 { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
315 va_list va; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
316 ssize_t ret; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
317 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
318 if (client->output->closed) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
319 return; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
320 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
321 va_start(va, fmt); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
322 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
323 T_BEGIN { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
324 string_t *str; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
325 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
326 str = t_str_new(256); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
327 str_vprintfa(str, fmt, va); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
328 str_append(str, "\n"); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
329 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
330 ret = o_stream_send(client->output, |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
331 str_data(str), str_len(str)); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
332 i_assert(ret < 0 || (size_t)ret == str_len(str)); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
333 } T_END; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
334 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
335 va_end(va); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
336 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
337 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
338 static int |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
339 client_fetch_urlpart(struct client *client, const char *url, |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
340 enum imap_urlauth_fetch_flags url_flags, |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
341 const char **bpstruct_r, bool *binary_with_nuls_r, |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
342 const char **errormsg_r) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
343 { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
344 const char *error; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
345 struct imap_msgpart_open_result mpresult; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
346 enum mail_error error_code; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
347 int ret; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
348 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
349 *bpstruct_r = NULL; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
350 *errormsg_r = NULL; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
351 *binary_with_nuls_r = FALSE; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
352 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
353 ret = imap_urlauth_fetch(client->urlauth_ctx, url, |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
354 &client->url, &error_code, &error); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
355 if (ret <= 0) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
356 if (ret < 0) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
357 return -1; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
358 error = t_strdup_printf("Failed to fetch URLAUTH \"%s\": %s", |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
359 url, error); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
360 if (client->debug) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
361 i_debug("%s", error); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
362 /* don't leak info about existence/accessibility |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
363 of mailboxes */ |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
364 if (error_code == MAIL_ERROR_PARAMS) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
365 *errormsg_r = error; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
366 return 0; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
367 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
368 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
369 if ((url_flags & IMAP_URLAUTH_FETCH_FLAG_BINARY) != 0) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
370 imap_msgpart_url_set_decode_to_binary(client->url); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
371 if ((url_flags & IMAP_URLAUTH_FETCH_FLAG_BODYPARTSTRUCTURE) != 0) { |
17472
da3a8fcd91db
imap-urlauth: Fatal failure error handling wasn't done correctly.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
372 ret = imap_msgpart_url_get_bodypartstructure(client->url, |
da3a8fcd91db
imap-urlauth: Fatal failure error handling wasn't done correctly.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
373 bpstruct_r, &error); |
da3a8fcd91db
imap-urlauth: Fatal failure error handling wasn't done correctly.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
374 if (ret <= 0) { |
15066
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
375 *errormsg_r = t_strdup_printf( |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
376 "Failed to read URLAUTH \"%s\": %s", url, error); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
377 if (client->debug) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
378 i_debug("%s", *errormsg_r); |
17472
da3a8fcd91db
imap-urlauth: Fatal failure error handling wasn't done correctly.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
379 return ret; |
15066
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
380 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
381 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
382 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
383 /* if requested, read the message part the URL points to */ |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
384 if ((url_flags & IMAP_URLAUTH_FETCH_FLAG_BODY) != 0 || |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
385 (url_flags & IMAP_URLAUTH_FETCH_FLAG_BINARY) != 0) { |
17472
da3a8fcd91db
imap-urlauth: Fatal failure error handling wasn't done correctly.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
386 ret = imap_msgpart_url_read_part(client->url, &mpresult, &error); |
da3a8fcd91db
imap-urlauth: Fatal failure error handling wasn't done correctly.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
387 if (ret <= 0) { |
15066
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
388 *errormsg_r = t_strdup_printf( |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
389 "Failed to read URLAUTH \"%s\": %s", url, error); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
390 if (client->debug) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
391 i_debug("%s", *errormsg_r); |
17472
da3a8fcd91db
imap-urlauth: Fatal failure error handling wasn't done correctly.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
392 return ret; |
15066
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
393 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
394 client->msg_part_size = mpresult.size; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
395 client->msg_part_input = mpresult.input; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
396 *binary_with_nuls_r = mpresult.binary_decoded_input_has_nuls; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
397 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
398 return 1; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
399 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
400 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
401 static int client_fetch_url(struct client *client, const char *url, |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
402 enum imap_urlauth_fetch_flags url_flags) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
403 { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
404 string_t *response; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
405 const char *bpstruct, *errormsg; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
406 bool binary_with_nuls; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
407 int ret; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
408 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
409 i_assert(client->url == NULL); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
410 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
411 client->msg_part_size = 0; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
412 client->msg_part_input = NULL; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
413 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
414 if (client->debug) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
415 i_debug("Fetching URLAUTH %s", url); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
416 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
417 /* fetch URL */ |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
418 ret = client_fetch_urlpart(client, url, url_flags, &bpstruct, |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
419 &binary_with_nuls, &errormsg); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
420 if (ret <= 0) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
421 /* fetch failed */ |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
422 if (client->url != NULL) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
423 imap_msgpart_url_free(&client->url); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
424 /* don't send error details to anonymous users: just to be sure |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
425 that no information about the target user account is unduly |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
426 leaked. */ |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
427 if (client->access_anonymous || errormsg == NULL) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
428 client_send_line(client, "NO"); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
429 else { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
430 client_send_line(client, "NO\terror=%s", |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
431 str_tabescape(errormsg)); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
432 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
433 if (ret < 0) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
434 /* fetch failed badly */ |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
435 client_abort(client, "Session aborted: Fatal failure while fetching URL"); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
436 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
437 return 0; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
438 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
439 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
440 response = t_str_new(256); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
441 str_append(response, "OK"); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
442 if (binary_with_nuls) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
443 str_append(response, "\thasnuls"); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
444 if (bpstruct != NULL) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
445 str_append(response, "\tbpstruct="); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
446 str_append(response, str_tabescape(bpstruct)); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
447 if (client->debug) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
448 i_debug("Fetched URLAUTH yielded BODYPARTSTRUCTURE (%s)", |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
449 bpstruct); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
450 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
451 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
452 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
453 /* return content */ |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
454 o_stream_cork(client->output); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
455 if (client->msg_part_size == 0 || client->msg_part_input == NULL) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
456 /* empty */ |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
457 str_append(response, "\t0"); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
458 client_send_line(client, "%s", str_c(response)); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
459 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
460 imap_msgpart_url_free(&client->url); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
461 client->url = NULL; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
462 if (client->debug) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
463 i_debug("Fetched URLAUTH yielded empty result"); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
464 } else { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
465 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
466 /* actual content */ |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
467 str_printfa(response, "\t%"PRIuUOFF_T, client->msg_part_size); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
468 client_send_line(client, "%s", str_c(response)); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
469 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
470 if (client->debug) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
471 i_debug("Fetched URLAUTH yielded %"PRIuUOFF_T" bytes " |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
472 "of %smessage data", client->msg_part_size, |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
473 (binary_with_nuls ? "binary " : "")); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
474 } |
15078
dc1db2eedbb1
imap-urlauth: Fixed crashes when destroying client
Stephan Bosch <stephan@rename-it.nl>
parents:
15077
diff
changeset
|
475 if (client_run_url(client) < 0) { |
dc1db2eedbb1
imap-urlauth: Fixed crashes when destroying client
Stephan Bosch <stephan@rename-it.nl>
parents:
15077
diff
changeset
|
476 client_abort(client, |
17674
417a984e91f3
imap-urlauth: Error message typofix.
Timo Sirainen <tss@iki.fi>
parents:
17472
diff
changeset
|
477 "Session aborted: Fatal failure while transferring URL"); |
15078
dc1db2eedbb1
imap-urlauth: Fixed crashes when destroying client
Stephan Bosch <stephan@rename-it.nl>
parents:
15077
diff
changeset
|
478 return 0; |
dc1db2eedbb1
imap-urlauth: Fixed crashes when destroying client
Stephan Bosch <stephan@rename-it.nl>
parents:
15077
diff
changeset
|
479 } |
15066
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
480 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
481 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
482 if (client->url != NULL) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
483 /* URL not finished */ |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
484 o_stream_set_flush_pending(client->output, TRUE); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
485 client->waiting_input = TRUE; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
486 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
487 o_stream_uncork(client->output); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
488 return client->url != NULL ? 0 : 1; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
489 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
490 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
491 static int |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
492 client_handle_command(struct client *client, const char *cmd, |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
493 const char *const *args, const char **error_r) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
494 { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
495 int ret; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
496 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
497 *error_r = NULL; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
498 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
499 /* "URL"["\tbody"]["\tbinary"]["\tbpstruct"]"\t"<url>: |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
500 fetch URL (meta)data */ |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
501 if (strcmp(cmd, "URL") == 0) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
502 enum imap_urlauth_fetch_flags url_flags = 0; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
503 const char *url; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
504 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
505 if (*args == NULL) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
506 *error_r = "URL: Missing URL parameter"; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
507 return -1; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
508 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
509 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
510 url = *args; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
511 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
512 args++; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
513 while (*args != NULL) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
514 if (strcasecmp(*args, "body") == 0) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
515 url_flags |= IMAP_URLAUTH_FETCH_FLAG_BODY; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
516 else if (strcasecmp(*args, "binary") == 0) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
517 url_flags |= IMAP_URLAUTH_FETCH_FLAG_BINARY; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
518 else if (strcasecmp(*args, "bpstruct") == 0) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
519 url_flags |= IMAP_URLAUTH_FETCH_FLAG_BODYPARTSTRUCTURE; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
520 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
521 args++; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
522 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
523 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
524 if (url_flags == 0) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
525 url_flags = IMAP_URLAUTH_FETCH_FLAG_BODY; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
526 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
527 T_BEGIN { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
528 ret = client_fetch_url(client, url, url_flags); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
529 } T_END; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
530 return ret; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
531 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
532 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
533 /* "END": unselect current user (closes worker) */ |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
534 if (strcmp(cmd, "END") == 0) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
535 if (args[0] != NULL) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
536 *error_r = "END: Invalid number of parameters"; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
537 return -1; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
538 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
539 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
540 client->finished = TRUE; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
541 if (client->ctrl_output != NULL) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
542 (void)o_stream_send_str(client->ctrl_output, "FINISHED\n"); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
543 client_destroy(client); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
544 return 0; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
545 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
546 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
547 *error_r = t_strconcat("Unknown or inappropriate command: ", cmd, NULL); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
548 return -1; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
549 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
550 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
551 static int |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
552 client_handle_user_command(struct client *client, const char *cmd, |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
553 const char *const *args, const char **error_r) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
554 { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
555 struct mail_storage_service_input input; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
556 struct imap_urlauth_worker_settings *set; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
557 struct mail_storage_service_user *user; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
558 struct imap_urlauth_config config; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
559 struct mail_user *mail_user; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
560 const char *error; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
561 unsigned int count; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
562 int ret; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
563 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
564 /* "USER\t"<username> */ |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
565 *error_r = NULL; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
566 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
567 /* check command syntax */ |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
568 if (strcmp(cmd, "USER") != 0) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
569 *error_r = t_strconcat("Unknown or inappropriate command: ", |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
570 cmd, NULL); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
571 return -1; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
572 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
573 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
574 if (args[0] == NULL || args[1] != NULL) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
575 *error_r = "USER: Invalid number of parameters"; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
576 return -1; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
577 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
578 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
579 /* lookup user */ |
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:
21118
diff
changeset
|
580 i_zero(&input); |
15066
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
581 input.module = "imap-urlauth-worker"; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
582 input.service = "imap-urlauth-worker"; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
583 input.username = args[0]; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
584 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
585 if (client->debug) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
586 i_debug("Looking up user %s", input.username); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
587 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
588 ret = mail_storage_service_lookup_next(storage_service, &input, |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
589 &user, &mail_user, &error); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
590 if (ret < 0) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
591 i_error("Failed to lookup user %s: %s", input.username, error); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
592 client_abort(client, "Session aborted: Failed to lookup user"); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
593 return 0; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
594 } else if (ret == 0) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
595 if (client->debug) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
596 i_debug("User %s doesn't exist", input.username); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
597 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
598 client_send_line(client, "NO"); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
599 return 1; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
600 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
601 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
602 client->debug = mail_user->mail_debug = |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
603 client->debug || mail_user->mail_debug; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
604 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
605 /* drop privileges */ |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
606 restrict_access_allow_coredumps(TRUE); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
607 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
608 set = mail_storage_service_user_get_set(user)[1]; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
609 settings_var_expand(&imap_urlauth_worker_setting_parser_info, set, |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
610 mail_user->pool, |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
611 mail_user_var_expand_table(mail_user)); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
612 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
613 if (set->verbose_proctitle) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
614 verbose_proctitle = TRUE; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
615 imap_urlauth_worker_refresh_proctitle(); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
616 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
617 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
618 client->service_user = user; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
619 client->mail_user = mail_user; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
620 client->set = set; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
621 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
622 if (client->debug) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
623 i_debug("Found user account `%s' on behalf of user `%s'", |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
624 mail_user->username, client->access_user); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
625 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
626 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
627 /* initialize urlauth context */ |
15225
6e7e62ee07be
imap-urlauth: Store urlauth keys to the new mailbox attributes.
Timo Sirainen <tss@iki.fi>
parents:
15219
diff
changeset
|
628 if (*set->imap_urlauth_host == '\0') { |
6e7e62ee07be
imap-urlauth: Store urlauth keys to the new mailbox attributes.
Timo Sirainen <tss@iki.fi>
parents:
15219
diff
changeset
|
629 i_error("imap_urlauth_host setting is not configured for user %s", |
15066
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
630 mail_user->username); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
631 client_send_line(client, "NO"); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
632 client_abort(client, "Session aborted: URLAUTH not configured"); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
633 return 0; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
634 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
635 |
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:
21118
diff
changeset
|
636 i_zero(&config); |
15066
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
637 config.url_host = set->imap_urlauth_host; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
638 config.url_port = set->imap_urlauth_port; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
639 config.access_user = client->access_user; |
15076
7e1f0146169f
imap-urlauth: Fixes to handling anonymous user
Stephan Bosch <stephan@rename-it.nl>
parents:
15066
diff
changeset
|
640 config.access_anonymous = client->access_anonymous; |
15066
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
641 config.access_applications = |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
642 (const void *)array_get(&client->access_apps, &count); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
643 |
15225
6e7e62ee07be
imap-urlauth: Store urlauth keys to the new mailbox attributes.
Timo Sirainen <tss@iki.fi>
parents:
15219
diff
changeset
|
644 client->urlauth_ctx = imap_urlauth_init(client->mail_user, &config); |
15066
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
645 if (client->debug) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
646 i_debug("Providing access to user account `%s' on behalf of `%s'", |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
647 mail_user->username, client->access_user); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
648 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
649 |
15201
d00cf8e0dae7
i_set_failure_prefix() now takes printf-like parameters.
Timo Sirainen <tss@iki.fi>
parents:
15187
diff
changeset
|
650 i_set_failure_prefix("imap-urlauth[%s](%s->%s): ", |
d00cf8e0dae7
i_set_failure_prefix() now takes printf-like parameters.
Timo Sirainen <tss@iki.fi>
parents:
15187
diff
changeset
|
651 my_pid, client->access_user, mail_user->username); |
15066
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
652 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
653 client_send_line(client, "OK"); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
654 return 1; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
655 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
656 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
657 static bool client_handle_input(struct client *client) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
658 { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
659 const char *line, *cmd, *error; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
660 int ret; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
661 |
16324
2a3134b0c25d
imap-urlauth-worker: Fixed a crash (by removing unnecessary code)
Timo Sirainen <tss@iki.fi>
parents:
16303
diff
changeset
|
662 if (client->url != NULL) { |
15066
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
663 /* we're still processing a URL. wait until it's |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
664 finished. */ |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
665 io_remove(&client->io); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
666 client->io = NULL; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
667 client->waiting_input = TRUE; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
668 return TRUE; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
669 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
670 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
671 if (client->io == NULL) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
672 client->io = io_add(client->fd_in, IO_READ, |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
673 client_input, client); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
674 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
675 client->waiting_input = FALSE; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
676 timeout_reset(client->to_idle); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
677 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
678 switch (i_stream_read(client->input)) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
679 case -1: |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
680 /* disconnected */ |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
681 if (client->ctrl_output != NULL) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
682 (void)o_stream_send_str(client->ctrl_output, "DISCONNECTED\n"); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
683 client_destroy(client); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
684 return FALSE; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
685 case -2: |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
686 /* line too long, kill it */ |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
687 client_abort(client, "Session aborted: Input line too long"); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
688 return FALSE; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
689 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
690 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
691 while ((line = i_stream_next_line(client->input)) != NULL) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
692 const char *const *args = t_strsplit_tabescaped(line); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
693 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
694 if (args[0] == NULL) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
695 continue; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
696 cmd = args[0]; args++; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
697 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
698 if (client->mail_user == NULL) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
699 ret = client_handle_user_command(client, cmd, args, &error); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
700 else |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
701 ret = client_handle_command(client, cmd, args, &error); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
702 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
703 if (ret <= 0) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
704 if (ret == 0) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
705 break; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
706 i_error("Client input error: %s", error); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
707 client_abort(client, "Session aborted: Unexpected input"); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
708 return FALSE; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
709 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
710 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
711 return TRUE; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
712 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
713 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
714 static void client_input(struct client *client) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
715 { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
716 (void)client_handle_input(client); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
717 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
718 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
719 static int client_output(struct client *client) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
720 { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
721 o_stream_cork(client->output); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
722 if (o_stream_flush(client->output) < 0) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
723 if (client->ctrl_output != NULL) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
724 (void)o_stream_send_str(client->ctrl_output, "DISCONNECTED\n"); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
725 client_destroy(client); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
726 return 1; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
727 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
728 timeout_reset(client->to_idle); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
729 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
730 if (client->url != NULL) { |
15078
dc1db2eedbb1
imap-urlauth: Fixed crashes when destroying client
Stephan Bosch <stephan@rename-it.nl>
parents:
15077
diff
changeset
|
731 if (client_run_url(client) < 0) { |
dc1db2eedbb1
imap-urlauth: Fixed crashes when destroying client
Stephan Bosch <stephan@rename-it.nl>
parents:
15077
diff
changeset
|
732 client_destroy(client); |
dc1db2eedbb1
imap-urlauth: Fixed crashes when destroying client
Stephan Bosch <stephan@rename-it.nl>
parents:
15077
diff
changeset
|
733 return 1; |
dc1db2eedbb1
imap-urlauth: Fixed crashes when destroying client
Stephan Bosch <stephan@rename-it.nl>
parents:
15077
diff
changeset
|
734 } |
15066
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
735 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
736 if (client->url == NULL && client->waiting_input) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
737 if (!client_handle_input(client)) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
738 /* client got destroyed */ |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
739 return 1; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
740 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
741 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
742 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
743 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
744 o_stream_uncork(client->output); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
745 if (client->url != NULL) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
746 /* url not finished yet */ |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
747 return 0; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
748 } else if (client->io == NULL) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
749 /* data still in output buffer, get back here to add IO */ |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
750 return 0; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
751 } else { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
752 return 1; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
753 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
754 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
755 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
756 static int |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
757 client_ctrl_read_fds(struct client *client) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
758 { |
15426 | 759 unsigned char data = 0; |
15066
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
760 ssize_t ret = 1; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
761 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
762 if (client->fd_in == -1) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
763 ret = fd_read(client->fd_ctrl, &data, |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
764 sizeof(data), &client->fd_in); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
765 if (ret > 0 && data == '0') |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
766 client->fd_out = client->fd_in; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
767 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
768 if (ret > 0 && client->fd_out == -1) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
769 ret = fd_read(client->fd_ctrl, &data, |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
770 sizeof(data), &client->fd_out); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
771 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
772 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
773 if (ret == 0) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
774 /* unexpectedly disconnected */ |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
775 client_destroy(client); |
15078
dc1db2eedbb1
imap-urlauth: Fixed crashes when destroying client
Stephan Bosch <stephan@rename-it.nl>
parents:
15077
diff
changeset
|
776 return 0; |
15066
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
777 } else if (ret < 0) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
778 if (errno == EAGAIN) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
779 return 0; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
780 i_error("fd_read() failed: %m"); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
781 return -1; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
782 } else if (data != '0') { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
783 i_error("fd_read() returned invalid byte 0x%2x", data); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
784 return -1; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
785 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
786 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
787 if (client->fd_in == -1 || client->fd_out == -1) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
788 i_error("Handshake is missing a file descriptor"); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
789 return -1; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
790 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
791 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
792 client->ctrl_input = |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
793 i_stream_create_fd(client->fd_ctrl, MAX_INBUF_SIZE, FALSE); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
794 client->ctrl_output = |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
795 o_stream_create_fd(client->fd_ctrl, (size_t)-1, FALSE); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
796 return 1; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
797 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
798 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
799 static void client_ctrl_input(struct client *client) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
800 { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
801 const char *const *args; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
802 const char *line; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
803 int ret; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
804 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
805 timeout_reset(client->to_idle); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
806 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
807 if (client->fd_in == -1 || client->fd_out == -1) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
808 if ((ret = client_ctrl_read_fds(client)) <= 0) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
809 if (ret < 0) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
810 client_abort(client, "FD Transfer failed"); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
811 return; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
812 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
813 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
814 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
815 switch (i_stream_read(client->ctrl_input)) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
816 case -1: |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
817 /* disconnected */ |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
818 client_destroy(client); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
819 return; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
820 case -2: |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
821 /* line too long, kill it */ |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
822 client_abort(client, |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
823 "Control session aborted: Input line too long"); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
824 return; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
825 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
826 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
827 if (!client->version_received) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
828 if ((line = i_stream_next_line(client->ctrl_input)) == NULL) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
829 return; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
830 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
831 if (!version_string_verify(line, "imap-urlauth-worker", |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
832 IMAP_URLAUTH_WORKER_PROTOCOL_MAJOR_VERSION)) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
833 i_error("imap-urlauth-worker client not compatible with this server " |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
834 "(mixed old and new binaries?) %s", line); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
835 client_abort(client, "Control session aborted: Version mismatch"); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
836 return; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
837 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
838 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
839 client->version_received = TRUE; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
840 if (o_stream_send_str(client->ctrl_output, "OK\n") < 0) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
841 client_destroy(client); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
842 return; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
843 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
844 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
845 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
846 if (client->access_received) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
847 client_abort(client, "Control session aborted: Unexpected input"); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
848 return; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
849 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
850 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
851 if ((line = i_stream_next_line(client->ctrl_input)) == NULL) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
852 return; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
853 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
854 args = t_strsplit_tabescaped(line); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
855 if (*args == NULL || strcmp(*args, "ACCESS") != 0) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
856 i_error("Invalid control command: %s", str_sanitize(line, 80)); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
857 client_abort(client, "Control session aborted: Invalid command"); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
858 return; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
859 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
860 args++; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
861 if (*args == NULL) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
862 i_error("Invalid ACCESS command: %s", str_sanitize(line, 80)); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
863 client_abort(client, "Control session aborted: Invalid command"); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
864 return; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
865 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
866 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
867 i_assert(client->access_user == NULL); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
868 if (**args != '\0') { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
869 client->access_user = i_strdup(*args); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
870 client->access_anonymous = FALSE; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
871 } else { |
15076
7e1f0146169f
imap-urlauth: Fixes to handling anonymous user
Stephan Bosch <stephan@rename-it.nl>
parents:
15066
diff
changeset
|
872 client->access_user = i_strdup("anonymous"); |
15066
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
873 client->access_anonymous = TRUE; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
874 } |
15201
d00cf8e0dae7
i_set_failure_prefix() now takes printf-like parameters.
Timo Sirainen <tss@iki.fi>
parents:
15187
diff
changeset
|
875 i_set_failure_prefix("imap-urlauth[%s](%s): ", |
d00cf8e0dae7
i_set_failure_prefix() now takes printf-like parameters.
Timo Sirainen <tss@iki.fi>
parents:
15187
diff
changeset
|
876 my_pid, client->access_user); |
15066
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
877 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
878 args++; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
879 while (*args != NULL) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
880 /* debug */ |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
881 if (strcasecmp(*args, "debug") == 0) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
882 client->debug = TRUE; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
883 /* apps=<access-application>[,<access-application,...] */ |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
884 } else if (strncasecmp(*args, "apps=", 5) == 0 && |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
885 (*args)[5] != '\0') { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
886 const char *const *apps = t_strsplit(*args+5, ","); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
887 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
888 while (*apps != NULL) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
889 char *app = i_strdup(*apps); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
890 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
891 array_append(&client->access_apps, &app, 1); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
892 if (client->debug) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
893 i_debug("User %s has URLAUTH %s access", |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
894 client->access_user, app); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
895 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
896 apps++; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
897 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
898 } else { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
899 i_error("Invalid ACCESS parameter: %s", str_sanitize(*args, 80)); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
900 client_abort(client, "Control session aborted: Invalid command"); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
901 return; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
902 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
903 args++; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
904 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
905 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
906 client->access_received = TRUE; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
907 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
908 if (o_stream_send_str(client->ctrl_output, "OK\n") < 0) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
909 client_destroy(client); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
910 return; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
911 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
912 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
913 client->input = i_stream_create_fd(client->fd_in, MAX_INBUF_SIZE, FALSE); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
914 client->output = o_stream_create_fd(client->fd_out, (size_t)-1, FALSE); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
915 client->io = io_add(client->fd_in, IO_READ, client_input, client); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
916 o_stream_set_flush_callback(client->output, client_output, client); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
917 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
918 if (client->debug) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
919 i_debug("Worker activated for access by user %s", |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
920 client->access_user); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
921 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
922 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
923 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
924 static void imap_urlauth_worker_die(void) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
925 { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
926 /* do nothing */ |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
927 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
928 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
929 static void main_stdio_run(const char *access_user, |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
930 const char *const *access_applications) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
931 { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
932 bool debug; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
933 |
16303
46dc61f6acae
Compiling fix for Sun compilers.
Timo Sirainen <tss@iki.fi>
parents:
15715
diff
changeset
|
934 debug = getenv("DEBUG") != NULL; |
15066
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
935 access_user = access_user != NULL ? access_user : getenv("USER"); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
936 if (access_user == NULL && IS_STANDALONE()) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
937 access_user = getlogin(); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
938 if (access_user == NULL) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
939 i_fatal("USER environment missing"); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
940 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
941 (void)client_create_standalone(access_user, access_applications, |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
942 STDIN_FILENO, STDOUT_FILENO, debug); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
943 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
944 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
945 static void client_connected(struct master_service_connection *conn) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
946 { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
947 master_service_client_connection_accept(conn); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
948 (void)client_create(conn->fd); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
949 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
950 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
951 int main(int argc, char *argv[]) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
952 { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
953 static const struct setting_parser_info *set_roots[] = { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
954 &imap_urlauth_worker_setting_parser_info, |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
955 NULL |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
956 }; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
957 enum master_service_flags service_flags = 0; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
958 enum mail_storage_service_flags storage_service_flags = |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
959 MAIL_STORAGE_SERVICE_FLAG_USERDB_LOOKUP | |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
960 MAIL_STORAGE_SERVICE_FLAG_NO_LOG_INIT; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
961 ARRAY_TYPE (const_string) access_apps; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
962 const char *access_user = NULL; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
963 int c; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
964 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
965 if (IS_STANDALONE()) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
966 service_flags |= MASTER_SERVICE_FLAG_STANDALONE | |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
967 MASTER_SERVICE_FLAG_STD_CLIENT; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
968 } else { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
969 service_flags |= MASTER_SERVICE_FLAG_KEEP_CONFIG_OPEN; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
970 storage_service_flags |= |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
971 MAIL_STORAGE_SERVICE_FLAG_DISALLOW_ROOT; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
972 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
973 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
974 master_service = master_service_init("imap-urlauth-worker", service_flags, |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
975 &argc, &argv, "a:"); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
976 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
977 t_array_init(&access_apps, 4); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
978 while ((c = master_getopt(master_service)) > 0) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
979 switch (c) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
980 case 'a': { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
981 const char *app = t_strdup(optarg); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
982 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
983 array_append(&access_apps, &app, 1); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
984 break; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
985 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
986 default: |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
987 return FATAL_DEFAULT; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
988 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
989 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
990 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
991 if ( optind < argc ) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
992 access_user = argv[optind++]; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
993 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
994 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
995 if (optind != argc) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
996 i_fatal_status(EX_USAGE, "Unknown argument: %s", argv[optind]); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
997 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
998 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
999 master_service_init_log(master_service, |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
1000 t_strdup_printf("imap-urlauth[%s]: ", my_pid)); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
1001 master_service_set_die_callback(master_service, imap_urlauth_worker_die); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
1002 |
15227
70ca88e74a4b
Moved random_init() from lib-imap-urlauth to imap/imap-urlauth main().
Timo Sirainen <tss@iki.fi>
parents:
15225
diff
changeset
|
1003 random_init(); |
15066
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
1004 storage_service = |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
1005 mail_storage_service_init(master_service, |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
1006 set_roots, storage_service_flags); |
16508
754d244b8249
Call master_service_init_finish() only after all of the initialization is done.
Timo Sirainen <tss@iki.fi>
parents:
16324
diff
changeset
|
1007 master_service_init_finish(master_service); |
15066
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
1008 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
1009 /* fake that we're running, so we know if client was destroyed |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
1010 while handling its initial input */ |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
1011 io_loop_set_running(current_ioloop); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
1012 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
1013 if (IS_STANDALONE()) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
1014 T_BEGIN { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
1015 if (array_count(&access_apps) > 0) { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
1016 (void)array_append_space(&access_apps); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
1017 main_stdio_run(access_user, array_idx(&access_apps,0)); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
1018 } else { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
1019 main_stdio_run(access_user, NULL); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
1020 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
1021 } T_END; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
1022 } else { |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
1023 io_loop_set_running(current_ioloop); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
1024 } |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
1025 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
1026 if (io_loop_is_running(current_ioloop)) |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
1027 master_service_run(master_service, client_connected); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
1028 clients_destroy_all(); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
1029 |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
1030 mail_storage_service_deinit(&storage_service); |
15227
70ca88e74a4b
Moved random_init() from lib-imap-urlauth to imap/imap-urlauth main().
Timo Sirainen <tss@iki.fi>
parents:
15225
diff
changeset
|
1031 random_deinit(); |
15066
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
1032 master_service_deinit(&master_service); |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
1033 return 0; |
d419aac7ab31
Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
1034 } |