Mercurial > dovecot > original-hg > dovecot-1.2
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 |
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 | 2 |
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 | 10 #include "client-common.h" |
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 | 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 | 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 | 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 | 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 } |