annotate src/login-common/client-common.c @ 8999:afc1b0ef120d HEAD

When :MAILBOXDIR= was empty, we might have appended extra '/' to it, which caused problems.
author Timo Sirainen <tss@iki.fi>
date Thu, 30 Apr 2009 20:00:09 -0400
parents b9faf4db2a9f
children 0c7bbdd7b81f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8590
b9faf4db2a9f Updated copyright notices to include year 2009.
Timo Sirainen <tss@iki.fi>
parents: 8583
diff changeset
1 /* Copyright (c) 2002-2009 Dovecot authors, see the included COPYING file */
2737
134ad6e8cd42 forgot to add
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2
134ad6e8cd42 forgot to add
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3 #include "common.h"
3384
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
4 #include "hostpid.h"
7120
eb71cda96663 Use linked list macros for handling clients linked list.
Timo Sirainen <tss@iki.fi>
parents: 7117
diff changeset
5 #include "llist.h"
3384
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
6 #include "str.h"
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
7 #include "str-sanitize.h"
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
8 #include "var-expand.h"
4570
cbbe2377f591 If SSL/TLS handshake didn't finish, show "TLS handshaking" instead of "TLS"
Timo Sirainen <tss@iki.fi>
parents: 3863
diff changeset
9 #include "ssl-proxy.h"
2737
134ad6e8cd42 forgot to add
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
10 #include "client-common.h"
134ad6e8cd42 forgot to add
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
11
3384
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
12 #include <stdlib.h>
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
13
7104
db5f55daa002 Forgot from imap/pop3-login clients hash -> linked list commit.
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
14 struct client *clients = NULL;
8027
62cf70991cf2 extern/static fixes (from a sparse check by Diego Liziero)
Timo Sirainen <tss@iki.fi>
parents: 7920
diff changeset
15 static unsigned int clients_count = 0;
7104
db5f55daa002 Forgot from imap/pop3-login clients hash -> linked list commit.
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
16
db5f55daa002 Forgot from imap/pop3-login clients hash -> linked list commit.
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
17 void client_link(struct client *client)
db5f55daa002 Forgot from imap/pop3-login clients hash -> linked list commit.
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
18 {
7120
eb71cda96663 Use linked list macros for handling clients linked list.
Timo Sirainen <tss@iki.fi>
parents: 7117
diff changeset
19 DLLIST_PREPEND(&clients, client);
7104
db5f55daa002 Forgot from imap/pop3-login clients hash -> linked list commit.
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
20 clients_count++;
db5f55daa002 Forgot from imap/pop3-login clients hash -> linked list commit.
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
21 }
db5f55daa002 Forgot from imap/pop3-login clients hash -> linked list commit.
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
22
db5f55daa002 Forgot from imap/pop3-login clients hash -> linked list commit.
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
23 void client_unlink(struct client *client)
db5f55daa002 Forgot from imap/pop3-login clients hash -> linked list commit.
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
24 {
db5f55daa002 Forgot from imap/pop3-login clients hash -> linked list commit.
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
25 i_assert(clients_count > 0);
db5f55daa002 Forgot from imap/pop3-login clients hash -> linked list commit.
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
26
db5f55daa002 Forgot from imap/pop3-login clients hash -> linked list commit.
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
27 clients_count--;
7120
eb71cda96663 Use linked list macros for handling clients linked list.
Timo Sirainen <tss@iki.fi>
parents: 7117
diff changeset
28 DLLIST_REMOVE(&clients, client);
7104
db5f55daa002 Forgot from imap/pop3-login clients hash -> linked list commit.
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
29 }
db5f55daa002 Forgot from imap/pop3-login clients hash -> linked list commit.
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
30
db5f55daa002 Forgot from imap/pop3-login clients hash -> linked list commit.
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
31 unsigned int clients_get_count(void)
db5f55daa002 Forgot from imap/pop3-login clients hash -> linked list commit.
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
32 {
db5f55daa002 Forgot from imap/pop3-login clients hash -> linked list commit.
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
33 return clients_count;
db5f55daa002 Forgot from imap/pop3-login clients hash -> linked list commit.
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
34 }
db5f55daa002 Forgot from imap/pop3-login clients hash -> linked list commit.
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
35
3384
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
36 static const struct var_expand_table *
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
37 get_var_expand_table(struct client *client)
2737
134ad6e8cd42 forgot to add
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
38 {
3384
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
39 static struct var_expand_table static_tab[] = {
8544
983d38de06c9 var_expand(): Added support for long %{variable} names.
Timo Sirainen <tss@iki.fi>
parents: 8302
diff changeset
40 { 'u', NULL, "user" },
983d38de06c9 var_expand(): Added support for long %{variable} names.
Timo Sirainen <tss@iki.fi>
parents: 8302
diff changeset
41 { 'n', NULL, "username" },
983d38de06c9 var_expand(): Added support for long %{variable} names.
Timo Sirainen <tss@iki.fi>
parents: 8302
diff changeset
42 { 'd', NULL, "domain" },
983d38de06c9 var_expand(): Added support for long %{variable} names.
Timo Sirainen <tss@iki.fi>
parents: 8302
diff changeset
43 { 's', NULL, "service" },
983d38de06c9 var_expand(): Added support for long %{variable} names.
Timo Sirainen <tss@iki.fi>
parents: 8302
diff changeset
44 { 'h', NULL, "home" },
983d38de06c9 var_expand(): Added support for long %{variable} names.
Timo Sirainen <tss@iki.fi>
parents: 8302
diff changeset
45 { 'l', NULL, "lip" },
983d38de06c9 var_expand(): Added support for long %{variable} names.
Timo Sirainen <tss@iki.fi>
parents: 8302
diff changeset
46 { 'r', NULL, "rip" },
983d38de06c9 var_expand(): Added support for long %{variable} names.
Timo Sirainen <tss@iki.fi>
parents: 8302
diff changeset
47 { 'p', NULL, "pid" },
983d38de06c9 var_expand(): Added support for long %{variable} names.
Timo Sirainen <tss@iki.fi>
parents: 8302
diff changeset
48 { 'm', NULL, "mech" },
983d38de06c9 var_expand(): Added support for long %{variable} names.
Timo Sirainen <tss@iki.fi>
parents: 8302
diff changeset
49 { 'a', NULL, "lport" },
983d38de06c9 var_expand(): Added support for long %{variable} names.
Timo Sirainen <tss@iki.fi>
parents: 8302
diff changeset
50 { 'b', NULL, "rport" },
983d38de06c9 var_expand(): Added support for long %{variable} names.
Timo Sirainen <tss@iki.fi>
parents: 8302
diff changeset
51 { 'c', NULL, "secured" },
983d38de06c9 var_expand(): Added support for long %{variable} names.
Timo Sirainen <tss@iki.fi>
parents: 8302
diff changeset
52 { 'k', NULL, "ssl_security" },
983d38de06c9 var_expand(): Added support for long %{variable} names.
Timo Sirainen <tss@iki.fi>
parents: 8302
diff changeset
53 { 'e', NULL, "mail_pid" },
983d38de06c9 var_expand(): Added support for long %{variable} names.
Timo Sirainen <tss@iki.fi>
parents: 8302
diff changeset
54 { '\0', NULL, NULL }
3384
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
55 };
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
56 struct var_expand_table *tab;
7117
769181a20483 Make sure all user input is sanitized before it's logged.
Timo Sirainen <tss@iki.fi>
parents: 7104
diff changeset
57 unsigned int i;
3384
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
58
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
59 tab = t_malloc(sizeof(static_tab));
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
60 memcpy(tab, static_tab, sizeof(static_tab));
2737
134ad6e8cd42 forgot to add
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
61
3384
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
62 if (client->virtual_user != NULL) {
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
63 tab[0].value = client->virtual_user;
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
64 tab[1].value = t_strcut(client->virtual_user, '@');
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
65 tab[2].value = strchr(client->virtual_user, '@');
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
66 if (tab[2].value != NULL) tab[2].value++;
7117
769181a20483 Make sure all user input is sanitized before it's logged.
Timo Sirainen <tss@iki.fi>
parents: 7104
diff changeset
67
769181a20483 Make sure all user input is sanitized before it's logged.
Timo Sirainen <tss@iki.fi>
parents: 7104
diff changeset
68 for (i = 0; i < 3; i++)
769181a20483 Make sure all user input is sanitized before it's logged.
Timo Sirainen <tss@iki.fi>
parents: 7104
diff changeset
69 tab[i].value = str_sanitize(tab[i].value, 80);
3384
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
70 }
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
71 tab[3].value = login_protocol;
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
72 tab[4].value = getenv("HOME");
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
73 tab[5].value = net_ip2addr(&client->local_ip);
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
74 tab[6].value = net_ip2addr(&client->ip);
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
75 tab[7].value = my_pid;
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
76 tab[8].value = client->auth_mech_name == NULL ? NULL :
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
77 str_sanitize(client->auth_mech_name, MAX_MECH_NAME);
4861
a688269c0dd4 Added %a=local port and %b=remote port variables for
Timo Sirainen <tss@iki.fi>
parents: 4570
diff changeset
78 tab[9].value = dec2str(client->local_port);
a688269c0dd4 Added %a=local port and %b=remote port variables for
Timo Sirainen <tss@iki.fi>
parents: 4570
diff changeset
79 tab[10].value = dec2str(client->remote_port);
4570
cbbe2377f591 If SSL/TLS handshake didn't finish, show "TLS handshaking" instead of "TLS"
Timo Sirainen <tss@iki.fi>
parents: 3863
diff changeset
80 if (!client->tls) {
4861
a688269c0dd4 Added %a=local port and %b=remote port variables for
Timo Sirainen <tss@iki.fi>
parents: 4570
diff changeset
81 tab[11].value = client->secured ? "secured" : NULL;
8122
3917bf9cf311 login_log_format_elements: Added %k to show SSL protocol/cipher information.
Timo Sirainen <tss@iki.fi>
parents: 8092
diff changeset
82 tab[12].value = "";
4570
cbbe2377f591 If SSL/TLS handshake didn't finish, show "TLS handshaking" instead of "TLS"
Timo Sirainen <tss@iki.fi>
parents: 3863
diff changeset
83 } else {
7374
0bb3fc72a74f If TLS connection closes with anything except a clean disconnection, log the
Timo Sirainen <tss@iki.fi>
parents: 7226
diff changeset
84 const char *ssl_state = ssl_proxy_is_handshaked(client->proxy) ?
0bb3fc72a74f If TLS connection closes with anything except a clean disconnection, log the
Timo Sirainen <tss@iki.fi>
parents: 7226
diff changeset
85 "TLS" : "TLS handshaking";
0bb3fc72a74f If TLS connection closes with anything except a clean disconnection, log the
Timo Sirainen <tss@iki.fi>
parents: 7226
diff changeset
86 const char *ssl_error = ssl_proxy_get_last_error(client->proxy);
0bb3fc72a74f If TLS connection closes with anything except a clean disconnection, log the
Timo Sirainen <tss@iki.fi>
parents: 7226
diff changeset
87
0bb3fc72a74f If TLS connection closes with anything except a clean disconnection, log the
Timo Sirainen <tss@iki.fi>
parents: 7226
diff changeset
88 tab[11].value = ssl_error == NULL ? ssl_state :
0bb3fc72a74f If TLS connection closes with anything except a clean disconnection, log the
Timo Sirainen <tss@iki.fi>
parents: 7226
diff changeset
89 t_strdup_printf("%s: %s", ssl_state, ssl_error);
8122
3917bf9cf311 login_log_format_elements: Added %k to show SSL protocol/cipher information.
Timo Sirainen <tss@iki.fi>
parents: 8092
diff changeset
90 tab[12].value = ssl_proxy_get_security_string(client->proxy);
4570
cbbe2377f591 If SSL/TLS handshake didn't finish, show "TLS handshaking" instead of "TLS"
Timo Sirainen <tss@iki.fi>
parents: 3863
diff changeset
91 }
8122
3917bf9cf311 login_log_format_elements: Added %k to show SSL protocol/cipher information.
Timo Sirainen <tss@iki.fi>
parents: 8092
diff changeset
92 tab[13].value = dec2str(client->mail_pid);
3384
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
93
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
94 return tab;
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
95 }
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
96
3863
55df57c028d4 Added "bool" type and changed all ints that were used as booleans to bool.
Timo Sirainen <tss@iki.fi>
parents: 3501
diff changeset
97 static bool have_key(const struct var_expand_table *table, const char *str)
3384
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
98 {
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
99 char key;
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
100 unsigned int i;
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
101
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
102 key = var_get_key(str);
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
103 for (i = 0; table[i].key != '\0'; i++) {
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
104 if (table[i].key == key) {
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
105 return table[i].value != NULL &&
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
106 table[i].value[0] != '\0';
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
107 }
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
108 }
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
109 return FALSE;
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
110 }
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
111
8583
2ff2cac3578b imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents: 8544
diff changeset
112 static const char *
2ff2cac3578b imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents: 8544
diff changeset
113 client_get_log_str(struct client *client, const char *msg)
3384
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
114 {
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
115 static struct var_expand_table static_tab[3] = {
8544
983d38de06c9 var_expand(): Added support for long %{variable} names.
Timo Sirainen <tss@iki.fi>
parents: 8302
diff changeset
116 { 's', NULL, NULL },
983d38de06c9 var_expand(): Added support for long %{variable} names.
Timo Sirainen <tss@iki.fi>
parents: 8302
diff changeset
117 { '$', NULL, NULL },
983d38de06c9 var_expand(): Added support for long %{variable} names.
Timo Sirainen <tss@iki.fi>
parents: 8302
diff changeset
118 { '\0', NULL, NULL }
3384
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
119 };
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
120 const struct var_expand_table *var_expand_table;
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
121 struct var_expand_table *tab;
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
122 const char *p, *const *e;
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
123 string_t *str;
2737
134ad6e8cd42 forgot to add
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
124
3384
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
125 var_expand_table = get_var_expand_table(client);
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
126
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
127 tab = t_malloc(sizeof(static_tab));
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
128 memcpy(tab, static_tab, sizeof(static_tab));
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
129
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
130 str = t_str_new(256);
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
131 for (e = log_format_elements; *e != NULL; e++) {
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
132 for (p = *e; *p != '\0'; p++) {
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
133 if (*p != '%' || p[1] == '\0')
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
134 continue;
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
135
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
136 p++;
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
137 if (have_key(var_expand_table, p)) {
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
138 if (str_len(str) > 0)
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
139 str_append(str, ", ");
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
140 var_expand(str, *e, var_expand_table);
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
141 break;
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
142 }
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
143 }
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
144 }
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
145
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
146 tab[0].value = t_strdup(str_c(str));
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
147 tab[1].value = msg;
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
148 str_truncate(str, 0);
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
149
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
150 var_expand(str, log_format, tab);
8583
2ff2cac3578b imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents: 8544
diff changeset
151 return str_c(str);
6940
414c9d631a81 Replaced t_push/t_pop calls with T_FRAME*() macros.
Timo Sirainen <tss@iki.fi>
parents: 6429
diff changeset
152 }
3384
3b75956d20c4 Added configurable logging for login process. Added configurable pop3 logout
Timo Sirainen <tss@iki.fi>
parents: 2737
diff changeset
153
6940
414c9d631a81 Replaced t_push/t_pop calls with T_FRAME*() macros.
Timo Sirainen <tss@iki.fi>
parents: 6429
diff changeset
154 void client_syslog(struct client *client, const char *msg)
414c9d631a81 Replaced t_push/t_pop calls with T_FRAME*() macros.
Timo Sirainen <tss@iki.fi>
parents: 6429
diff changeset
155 {
7226
e6693a0ec8e1 Renamed T_FRAME_BEGIN/END to T_BEGIN/END. Removed T_FRAME() macro and
Timo Sirainen <tss@iki.fi>
parents: 7120
diff changeset
156 T_BEGIN {
8583
2ff2cac3578b imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents: 8544
diff changeset
157 i_info("%s", client_get_log_str(client, msg));
2ff2cac3578b imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents: 8544
diff changeset
158 } T_END;
2ff2cac3578b imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents: 8544
diff changeset
159 }
2ff2cac3578b imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents: 8544
diff changeset
160
2ff2cac3578b imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents: 8544
diff changeset
161 void client_syslog_err(struct client *client, const char *msg)
2ff2cac3578b imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents: 8544
diff changeset
162 {
2ff2cac3578b imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents: 8544
diff changeset
163 T_BEGIN {
2ff2cac3578b imap/pop3-login: Cleaned up proxying code. Don't disconnect client on proxy failures.
Timo Sirainen <tss@iki.fi>
parents: 8544
diff changeset
164 i_error("%s", client_get_log_str(client, msg));
7226
e6693a0ec8e1 Renamed T_FRAME_BEGIN/END to T_BEGIN/END. Removed T_FRAME() macro and
Timo Sirainen <tss@iki.fi>
parents: 7120
diff changeset
165 } T_END;
2737
134ad6e8cd42 forgot to add
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
166 }
7920
3644883cf44e Support transferring original IPs and ports through IMAP proxies.
Timo Sirainen <tss@iki.fi>
parents: 7374
diff changeset
167
3644883cf44e Support transferring original IPs and ports through IMAP proxies.
Timo Sirainen <tss@iki.fi>
parents: 7374
diff changeset
168 bool client_is_trusted(struct client *client)
3644883cf44e Support transferring original IPs and ports through IMAP proxies.
Timo Sirainen <tss@iki.fi>
parents: 7374
diff changeset
169 {
3644883cf44e Support transferring original IPs and ports through IMAP proxies.
Timo Sirainen <tss@iki.fi>
parents: 7374
diff changeset
170 const char *const *net;
3644883cf44e Support transferring original IPs and ports through IMAP proxies.
Timo Sirainen <tss@iki.fi>
parents: 7374
diff changeset
171 struct ip_addr net_ip;
3644883cf44e Support transferring original IPs and ports through IMAP proxies.
Timo Sirainen <tss@iki.fi>
parents: 7374
diff changeset
172 unsigned int bits;
3644883cf44e Support transferring original IPs and ports through IMAP proxies.
Timo Sirainen <tss@iki.fi>
parents: 7374
diff changeset
173
3644883cf44e Support transferring original IPs and ports through IMAP proxies.
Timo Sirainen <tss@iki.fi>
parents: 7374
diff changeset
174 if (trusted_networks == NULL)
3644883cf44e Support transferring original IPs and ports through IMAP proxies.
Timo Sirainen <tss@iki.fi>
parents: 7374
diff changeset
175 return FALSE;
3644883cf44e Support transferring original IPs and ports through IMAP proxies.
Timo Sirainen <tss@iki.fi>
parents: 7374
diff changeset
176
3644883cf44e Support transferring original IPs and ports through IMAP proxies.
Timo Sirainen <tss@iki.fi>
parents: 7374
diff changeset
177 net = t_strsplit_spaces(trusted_networks, ", ");
3644883cf44e Support transferring original IPs and ports through IMAP proxies.
Timo Sirainen <tss@iki.fi>
parents: 7374
diff changeset
178 for (; *net != NULL; net++) {
3644883cf44e Support transferring original IPs and ports through IMAP proxies.
Timo Sirainen <tss@iki.fi>
parents: 7374
diff changeset
179 if (net_parse_range(*net, &net_ip, &bits) < 0) {
3644883cf44e Support transferring original IPs and ports through IMAP proxies.
Timo Sirainen <tss@iki.fi>
parents: 7374
diff changeset
180 i_error("login_trusted_networks: "
3644883cf44e Support transferring original IPs and ports through IMAP proxies.
Timo Sirainen <tss@iki.fi>
parents: 7374
diff changeset
181 "Invalid network '%s'", *net);
3644883cf44e Support transferring original IPs and ports through IMAP proxies.
Timo Sirainen <tss@iki.fi>
parents: 7374
diff changeset
182 break;
3644883cf44e Support transferring original IPs and ports through IMAP proxies.
Timo Sirainen <tss@iki.fi>
parents: 7374
diff changeset
183 }
3644883cf44e Support transferring original IPs and ports through IMAP proxies.
Timo Sirainen <tss@iki.fi>
parents: 7374
diff changeset
184
3644883cf44e Support transferring original IPs and ports through IMAP proxies.
Timo Sirainen <tss@iki.fi>
parents: 7374
diff changeset
185 if (net_is_in_network(&client->ip, &net_ip, bits))
3644883cf44e Support transferring original IPs and ports through IMAP proxies.
Timo Sirainen <tss@iki.fi>
parents: 7374
diff changeset
186 return TRUE;
3644883cf44e Support transferring original IPs and ports through IMAP proxies.
Timo Sirainen <tss@iki.fi>
parents: 7374
diff changeset
187 }
3644883cf44e Support transferring original IPs and ports through IMAP proxies.
Timo Sirainen <tss@iki.fi>
parents: 7374
diff changeset
188 return FALSE;
3644883cf44e Support transferring original IPs and ports through IMAP proxies.
Timo Sirainen <tss@iki.fi>
parents: 7374
diff changeset
189 }
8302
0db37acdc59f Login process: Log auth failure reasons better in disconnect message.
Timo Sirainen <tss@iki.fi>
parents: 8122
diff changeset
190
0db37acdc59f Login process: Log auth failure reasons better in disconnect message.
Timo Sirainen <tss@iki.fi>
parents: 8122
diff changeset
191 const char *client_get_extra_disconnect_reason(struct client *client)
0db37acdc59f Login process: Log auth failure reasons better in disconnect message.
Timo Sirainen <tss@iki.fi>
parents: 8122
diff changeset
192 {
0db37acdc59f Login process: Log auth failure reasons better in disconnect message.
Timo Sirainen <tss@iki.fi>
parents: 8122
diff changeset
193 if (ssl_require_client_cert && client->proxy != NULL) {
0db37acdc59f Login process: Log auth failure reasons better in disconnect message.
Timo Sirainen <tss@iki.fi>
parents: 8122
diff changeset
194 if (ssl_proxy_has_broken_client_cert(client->proxy))
0db37acdc59f Login process: Log auth failure reasons better in disconnect message.
Timo Sirainen <tss@iki.fi>
parents: 8122
diff changeset
195 return "(client sent an invalid cert)";
0db37acdc59f Login process: Log auth failure reasons better in disconnect message.
Timo Sirainen <tss@iki.fi>
parents: 8122
diff changeset
196 if (!ssl_proxy_has_valid_client_cert(client->proxy))
0db37acdc59f Login process: Log auth failure reasons better in disconnect message.
Timo Sirainen <tss@iki.fi>
parents: 8122
diff changeset
197 return "(client didn't send a cert)";
0db37acdc59f Login process: Log auth failure reasons better in disconnect message.
Timo Sirainen <tss@iki.fi>
parents: 8122
diff changeset
198 }
0db37acdc59f Login process: Log auth failure reasons better in disconnect message.
Timo Sirainen <tss@iki.fi>
parents: 8122
diff changeset
199
0db37acdc59f Login process: Log auth failure reasons better in disconnect message.
Timo Sirainen <tss@iki.fi>
parents: 8122
diff changeset
200 if (client->auth_attempts == 0)
0db37acdc59f Login process: Log auth failure reasons better in disconnect message.
Timo Sirainen <tss@iki.fi>
parents: 8122
diff changeset
201 return "(no auth attempts)";
0db37acdc59f Login process: Log auth failure reasons better in disconnect message.
Timo Sirainen <tss@iki.fi>
parents: 8122
diff changeset
202
0db37acdc59f Login process: Log auth failure reasons better in disconnect message.
Timo Sirainen <tss@iki.fi>
parents: 8122
diff changeset
203 /* some auth attempts without SSL/TLS */
0db37acdc59f Login process: Log auth failure reasons better in disconnect message.
Timo Sirainen <tss@iki.fi>
parents: 8122
diff changeset
204 if (client->auth_tried_disabled_plaintext)
0db37acdc59f Login process: Log auth failure reasons better in disconnect message.
Timo Sirainen <tss@iki.fi>
parents: 8122
diff changeset
205 return "(tried to use disabled plaintext auth)";
0db37acdc59f Login process: Log auth failure reasons better in disconnect message.
Timo Sirainen <tss@iki.fi>
parents: 8122
diff changeset
206 if (ssl_require_client_cert)
0db37acdc59f Login process: Log auth failure reasons better in disconnect message.
Timo Sirainen <tss@iki.fi>
parents: 8122
diff changeset
207 return "(cert required, client didn't start TLS)";
0db37acdc59f Login process: Log auth failure reasons better in disconnect message.
Timo Sirainen <tss@iki.fi>
parents: 8122
diff changeset
208
0db37acdc59f Login process: Log auth failure reasons better in disconnect message.
Timo Sirainen <tss@iki.fi>
parents: 8122
diff changeset
209 return t_strdup_printf("(auth failed, %u attempts)",
0db37acdc59f Login process: Log auth failure reasons better in disconnect message.
Timo Sirainen <tss@iki.fi>
parents: 8122
diff changeset
210 client->auth_attempts);
0db37acdc59f Login process: Log auth failure reasons better in disconnect message.
Timo Sirainen <tss@iki.fi>
parents: 8122
diff changeset
211 }