annotate src/imap-urlauth/imap-urlauth.c @ 22656:1789bf2a1e01

director: Make sure HOST-RESET-USERS isn't used with max_moving_users=0 The reset command would just hang in that case. doveadm would never have sent this, so this is just an extra sanity check.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Sun, 05 Nov 2017 23:51:56 +0200
parents 2e2563132d5f
children cb108f786fb4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
21390
2e2563132d5f Updated copyright notices to include the year 2017.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents: 21389
diff changeset
1 /* Copyright (c) 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 /*
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
4 The imap-urlauth service provides URLAUTH access between different accounts. If
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
5 user A has an URLAUTH that references a mail from user B, it makes a connection
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
6 to the imap-urlauth service to access user B's mail store to retrieve the
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
7 mail.
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
8
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
9 The authentication and authorization of the URLAUTH is performed whithin
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
10 this service. Because access to the mailbox and the associated mailbox keys is
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
11 necessary to retrieve the message and for verification of the URLAUTH, the
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
12 urlauth services need root privileges. To mitigate security concerns, the
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
13 retrieval and verification of the URLs is performed in a worker service that
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
14 drops root privileges and acts as target user B.
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
15
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
16 The imap-urlauth service thus consists of three separate stages:
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
17
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
18 - imap-urlauth-login:
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
19 This is the login service which operates identical to imap-login and
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
20 pop3-login equivalents, except for the fact that only token authentication is
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
21 allowed. It verifies that the connecting client is an IMAP service acting on
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
22 behaf of an authenticated user.
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
23
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
24 - imap-urlauth:
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
25 Once the client is authenticated, the connection gets passed to the
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
26 imap-urlauth service (as implemented here). The goal of this stage is
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
27 to prevent the need for re-authenticating to the imap-urlauth service when
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
28 the clients wants to switch to a different target user. It normally runs as
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
29 $default_internal_user and starts workers to perform the actual work. To start
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
30 a worker, the imap-urlauth service establishes a control connection to the
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
31 imap-urlauth-worker service. In the handshake phase of the control protocol,
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
32 the connection of the client is passed to the worker. Once the worker
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
33 finishes, a new worker is started and the client connection is tranfered to
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
34 it, unless the client is disconnected.
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 - imap-urlauth-worker:
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
37 The worker handles the URLAUTH requests from the client, so this is where the
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
38 mail store of the target user is accessed. The worker starts as root. In the
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
39 protocol interaction the client first indicates what the target user is.
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
40 The worker then performs a userdb lookup and drops privileges. The client can
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
41 then submit URLAUTH requests, which are limited to that user. Once the client
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
42 wants to access a different user, the worker terminates and the imap-urlauth
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
43 service starts a new worker for the next target user.
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
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
46 #include "imap-urlauth-common.h"
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
47 #include "lib-signals.h"
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
48 #include "ioloop.h"
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
49 #include "buffer.h"
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
50 #include "istream.h"
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
51 #include "ostream.h"
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
52 #include "abspath.h"
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
53 #include "base64.h"
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
54 #include "str.h"
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
55 #include "process-title.h"
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
56 #include "auth-master.h"
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
57 #include "master-service.h"
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
58 #include "master-service-settings.h"
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
59 #include "master-login.h"
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
60 #include "master-interface.h"
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
61 #include "var-expand.h"
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
62
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
63 #include <stdio.h>
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
64 #include <unistd.h>
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 #define IS_STANDALONE() \
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
67 (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
68
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
69 bool verbose_proctitle = FALSE;
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
70 static struct master_login *master_login = NULL;
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
71
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
72 static const struct imap_urlauth_settings *imap_urlauth_settings;
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 void imap_urlauth_refresh_proctitle(void)
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
75 {
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
76 struct client *client;
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
77 string_t *title = t_str_new(128);
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
78
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
79 if (!verbose_proctitle)
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
80 return;
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 str_append_c(title, '[');
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
83 switch (imap_urlauth_client_count) {
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
84 case 0:
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
85 str_append(title, "idling");
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
86 break;
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
87 case 1:
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
88 client = imap_urlauth_clients;
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
89 str_append(title, client->username);
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
90 break;
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
91 default:
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
92 str_printfa(title, "%u connections", imap_urlauth_client_count);
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
93 break;
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 str_append_c(title, ']');
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
96 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
97 }
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 static void imap_urlauth_die(void)
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
100 {
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
101 /* do nothing. imap_urlauth connections typically die pretty quick anyway. */
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
102 }
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
103
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
104 static int
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
105 client_create_from_input(const char *username, int fd_in, int fd_out)
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
106 {
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
107 struct client *client;
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
108
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
109 if (client_create(username, fd_in, fd_out,
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
110 imap_urlauth_settings, &client) < 0)
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
111 return -1;
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
112
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
113 if (!IS_STANDALONE())
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
114 client_send_line(client, "OK");
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
115 return 0;
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
116 }
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
117
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
118 static void main_stdio_run(const char *username)
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
119 {
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
120 username = username != NULL ? username : getenv("USER");
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
121 if (username == NULL && IS_STANDALONE())
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
122 username = getlogin();
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
123 if (username == NULL)
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
124 i_fatal("USER environment missing");
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
125
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
126 (void)client_create_from_input(username, STDIN_FILENO, STDOUT_FILENO);
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
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
130 login_client_connected(const struct master_login_client *client,
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
131 const char *username, const char *const *extra_fields)
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
132 {
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
133 const char *msg = "NO\n";
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
134 struct auth_user_reply reply;
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
135 struct net_unix_cred cred;
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 auth_user_fields_parse(extra_fields, pool_datastack_create(), &reply);
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 /* check peer credentials if possible */
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
140 if (reply.uid != (uid_t)-1 && net_getunixcred(client->fd, &cred) == 0 &&
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
141 reply.uid != cred.uid) {
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
142 i_error("Peer's credentials (uid=%ld) do not match "
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
143 "the user that logged in (uid=%ld).",
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
144 (long)cred.uid, (long)reply.uid);
18629
9c4d1e1e252f Compiler warning fixes
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
145 if (write(client->fd, msg, strlen(msg)) < 0) {
9c4d1e1e252f Compiler warning fixes
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
146 /* ignored */
9c4d1e1e252f Compiler warning fixes
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
147 }
15066
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
148 net_disconnect(client->fd);
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
149 return;
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
150 }
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
151
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
152 if (reply.anonymous)
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
153 username = NULL;
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
154
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
155 if (client_create_from_input(username, client->fd, client->fd) < 0)
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
156 net_disconnect(client->fd);
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
157 }
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
158
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
159 static void login_client_failed(const struct master_login_client *client,
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
160 const char *errormsg ATTR_UNUSED)
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
161 {
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
162 const char *msg = "NO\n";
18629
9c4d1e1e252f Compiler warning fixes
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
163 if (write(client->fd, msg, strlen(msg)) < 0) {
9c4d1e1e252f Compiler warning fixes
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
164 /* ignored */
9c4d1e1e252f Compiler warning fixes
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
165 }
15066
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
166 }
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
167
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
168 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
169 {
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
170 /* when running standalone, we shouldn't even get here */
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
171 i_assert(master_login != NULL);
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
172
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
173 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
174 master_login_add(master_login, conn->fd);
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
175 }
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
176
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
177 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
178 {
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
179 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
180 &imap_urlauth_setting_parser_info,
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
181 NULL
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
182 };
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
183 struct master_login_settings login_set;
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
184 struct master_service_settings_input input;
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
185 struct master_service_settings_output output;
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
186 void **sets;
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
187 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
188 const char *error = NULL, *username = NULL;
19706
3a4866198d8f imap, pop3, imap-urlauth: Added -a <auth-master socket path> parameter
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
189 const char *auth_socket_path = "auth-master";
3a4866198d8f imap, pop3, imap-urlauth: Added -a <auth-master socket path> parameter
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
190 int c;
15066
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
191
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: 19706
diff changeset
192 i_zero(&login_set);
15066
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
193 login_set.postlogin_timeout_secs = MASTER_POSTLOGIN_TIMEOUT_DEFAULT;
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
194
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
195 if (IS_STANDALONE() && getuid() == 0 &&
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
196 net_getpeername(1, NULL, NULL) == 0) {
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
197 printf("NO imap_urlauth binary must not be started from "
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
198 "inetd, use imap-urlauth-login instead.\n");
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
199 return 1;
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
200 }
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
201
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
202 if (IS_STANDALONE()) {
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
203 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
204 MASTER_SERVICE_FLAG_STD_CLIENT;
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
205 } else {
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
206 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
207 }
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
208
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
209 master_service = master_service_init("imap-urlauth", service_flags,
19706
3a4866198d8f imap, pop3, imap-urlauth: Added -a <auth-master socket path> parameter
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
210 &argc, &argv, "a:");
3a4866198d8f imap, pop3, imap-urlauth: Added -a <auth-master socket path> parameter
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
211 while ((c = master_getopt(master_service)) > 0) {
3a4866198d8f imap, pop3, imap-urlauth: Added -a <auth-master socket path> parameter
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
212 switch (c) {
3a4866198d8f imap, pop3, imap-urlauth: Added -a <auth-master socket path> parameter
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
213 case 'a':
3a4866198d8f imap, pop3, imap-urlauth: Added -a <auth-master socket path> parameter
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
214 auth_socket_path = optarg;
3a4866198d8f imap, pop3, imap-urlauth: Added -a <auth-master socket path> parameter
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
215 break;
3a4866198d8f imap, pop3, imap-urlauth: Added -a <auth-master socket path> parameter
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
216 default:
3a4866198d8f imap, pop3, imap-urlauth: Added -a <auth-master socket path> parameter
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
217 return FATAL_DEFAULT;
3a4866198d8f imap, pop3, imap-urlauth: Added -a <auth-master socket path> parameter
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
218 }
3a4866198d8f imap, pop3, imap-urlauth: Added -a <auth-master socket path> parameter
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
219 }
15066
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
220 master_service_init_log(master_service, "imap-urlauth: ");
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
221
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: 19706
diff changeset
222 i_zero(&input);
15066
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
223 input.roots = set_roots;
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
224 input.module = "imap-urlauth";
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
225 input.service = "imap-urlauth";
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
226 if (master_service_settings_read(master_service, &input, &output,
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
227 &error) < 0)
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
228 i_fatal("Error reading configuration: %s", error);
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
229
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
230 sets = master_service_settings_get_others(master_service);
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
231 imap_urlauth_settings = sets[0];
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
232
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
233 if (imap_urlauth_settings->verbose_proctitle)
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
234 verbose_proctitle = TRUE;
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
235
19706
3a4866198d8f imap, pop3, imap-urlauth: Added -a <auth-master socket path> parameter
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
236 login_set.auth_socket_path = t_abspath(auth_socket_path);
15066
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
237 login_set.callback = login_client_connected;
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
238 login_set.failure_callback = login_client_failed;
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
239
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
240 master_service_init_finish(master_service);
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
241 master_service_set_die_callback(master_service, imap_urlauth_die);
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
242
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
243 /* 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
244 while handling its initial input */
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
245 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
246
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
247 if (IS_STANDALONE()) {
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
248 T_BEGIN {
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
249 main_stdio_run(username);
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
250 } T_END;
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
251 } else {
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
252 master_login = master_login_init(master_service, &login_set);
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
253 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
254 }
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
255
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
256 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
257 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
258 clients_destroy_all();
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
259
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
260 if (master_login != NULL)
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
261 master_login_deinit(&master_login);
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
262 master_service_deinit(&master_service);
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
263 return 0;
d419aac7ab31 Added support for IMAP URLAUTH and URLAUTH=BINARY extensions
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
264 }