client-common.c revision 8372fc7efb6d64dff2e5f55fb4a3822c56869cfe
e59faf65ce864fe95dc00f5d52b8323cdbd0608aTimo Sirainen/* Copyright (c) 2002-2008 Dovecot authors, see the included COPYING file */
b039dabf4c53f72454e795930e7643b6e0e625f9Timo Sirainenstatic unsigned int clients_count = 0;
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainenunsigned int clients_get_count(void)
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainenstatic const struct var_expand_table *
de486b59018016977015ef42e6071155b60e82e1Timo Sirainen static struct var_expand_table static_tab[] = {
8a0ad174adb1eb5108511b90e97f4e5f9089b0eeTimo Sirainen unsigned int i;
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen tab[1].value = t_strcut(client->virtual_user, '@');
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen tab[2].value = strchr(client->virtual_user, '@');
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen for (i = 0; i < 3; i++)
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen tab[i].value = str_sanitize(tab[i].value, 80);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen tab[5].value = net_ip2addr(&client->local_ip);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen tab[8].value = client->auth_mech_name == NULL ? NULL :
8a0ad174adb1eb5108511b90e97f4e5f9089b0eeTimo Sirainen str_sanitize(client->auth_mech_name, MAX_MECH_NAME);
8a0ad174adb1eb5108511b90e97f4e5f9089b0eeTimo Sirainen tab[11].value = client->secured ? "secured" : NULL;
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen const char *ssl_state = ssl_proxy_is_handshaked(client->proxy) ?
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen const char *ssl_error = ssl_proxy_get_last_error(client->proxy);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen tab[11].value = ssl_error == NULL ? ssl_state :
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen t_strdup_printf("%s: %s", ssl_state, ssl_error);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen tab[12].value = ssl_proxy_get_security_string(client->proxy);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainenstatic bool have_key(const struct var_expand_table *table, const char *str)
a24519c36d5f8fa22f58b2c693ba547e8d175a54Timo Sirainen unsigned int i;
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainenstatic const char *
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainenclient_get_log_str(struct client *client, const char *msg)
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen static struct var_expand_table static_tab[3] = {
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen const struct var_expand_table *var_expand_table;
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen const char *p, *const *e;
2649b237dd4690575e75a30b2bf3b39ebd37b835Timo Sirainen var_expand_table = get_var_expand_table(client);
6600c05e2ab38e9f662582b63c56b0c980a03748Timo Sirainen for (e = log_format_elements; *e != NULL; e++) {
2649b237dd4690575e75a30b2bf3b39ebd37b835Timo Sirainen for (p = *e; *p != '\0'; p++) {
b13f738e8eb3f24dc2abf2c804f954b4d864ac6fTimo Sirainenvoid client_syslog(struct client *client, const char *msg)
2a6dcd984104fed84bed8795ccdfabb20e41ce52Timo Sirainen i_info("%s", client_get_log_str(client, msg));
2a6dcd984104fed84bed8795ccdfabb20e41ce52Timo Sirainenvoid client_syslog_err(struct client *client, const char *msg)
2a6dcd984104fed84bed8795ccdfabb20e41ce52Timo Sirainen i_error("%s", client_get_log_str(client, msg));
2649b237dd4690575e75a30b2bf3b39ebd37b835Timo Sirainen const char *const *net;
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen unsigned int bits;
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen net = t_strsplit_spaces(trusted_networks, ", ");
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen if (net_parse_range(*net, &net_ip, &bits) < 0) {
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen if (net_is_in_network(&client->ip, &net_ip, bits))
e5acc283bf030b0b5c79ca4e52d315c516a299faPascal Volkconst char *client_get_extra_disconnect_reason(struct client *client)
e5acc283bf030b0b5c79ca4e52d315c516a299faPascal Volk if (ssl_require_client_cert && client->proxy != NULL) {
e5acc283bf030b0b5c79ca4e52d315c516a299faPascal Volk if (ssl_proxy_has_broken_client_cert(client->proxy))
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen return "(client sent an invalid cert)";
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen if (!ssl_proxy_has_valid_client_cert(client->proxy))
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen return "(client didn't send a cert)";
1701e3f91107051b1704721bf1dc1e32491faaf9Timo Sirainen return "(no auth attempts)";
94b0ff77495c3ed14bdd4b5d7ae1eb37e8c9efb5Timo Sirainen /* some auth attempts without SSL/TLS */
adb6413686e52e00dded4932babcc08ff041876bTimo Sirainen return "(tried to use disabled plaintext auth)";
adb6413686e52e00dded4932babcc08ff041876bTimo Sirainen return "(cert required, client didn't start TLS)";
9abf5be0962538e1f6f5c73c838ff677341da0c9Timo Sirainen return t_strdup_printf("(auth failed, %u attempts)",