Mercurial > dovecot > core-2.2
changeset 19029:170f2b9f4977
*-login: Added %{passdb:*} fields to login_log_format_elements
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Fri, 28 Aug 2015 14:43:35 +0200 |
parents | 17220b7e1378 |
children | 061c21b5c5e4 |
files | src/login-common/client-common.c src/login-common/client-common.h src/login-common/sasl-server.c |
diffstat | 3 files changed, 29 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/login-common/client-common.c Thu Aug 27 18:39:58 2015 +0200 +++ b/src/login-common/client-common.c Fri Aug 28 14:43:35 2015 +0200 @@ -587,13 +587,37 @@ } static const char * +client_var_expand_func_passdb(const char *data, void *context) +{ + struct client *client = context; + const char *field_name = data; + unsigned int i, field_name_len; + + if (client->auth_passdb_args == NULL) + return NULL; + + field_name_len = strlen(field_name); + for (i = 0; client->auth_passdb_args[i] != NULL; i++) { + if (strncmp(client->auth_passdb_args[i], field_name, + field_name_len) == 0 && + client->auth_passdb_args[i][field_name_len] == '=') + return client->auth_passdb_args[i] + field_name_len+1; + } + return NULL; +} + +static const char * client_get_log_str(struct client *client, const char *msg) { - static struct var_expand_table static_tab[3] = { + static const struct var_expand_table static_tab[3] = { { 's', NULL, NULL }, { '$', NULL, NULL }, { '\0', NULL, NULL } }; + static const struct var_expand_func_table func_table[] = { + { "passdb", client_var_expand_func_passdb }, + { NULL, NULL } + }; const struct var_expand_table *var_expand_table; struct var_expand_table *tab; char *const *e; @@ -609,7 +633,8 @@ str2 = t_str_new(128); for (e = client->set->log_format_elements_split; *e != NULL; e++) { pos = str_len(str); - var_expand(str, *e, var_expand_table); + var_expand_with_funcs(str, *e, var_expand_table, + func_table, client); if (have_username_key(*e)) { /* username is added even if it's empty */ } else {
--- a/src/login-common/client-common.h Thu Aug 27 18:39:58 2015 +0200 +++ b/src/login-common/client-common.h Fri Aug 28 14:43:35 2015 +0200 @@ -137,6 +137,7 @@ string_t *auth_response; time_t auth_first_started, auth_finished; const char *sasl_final_resp; + const char *const *auth_passdb_args; unsigned int master_auth_id; unsigned int master_tag;
--- a/src/login-common/sasl-server.c Thu Aug 27 18:39:58 2015 +0200 +++ b/src/login-common/sasl-server.c Fri Aug 28 14:43:35 2015 +0200 @@ -234,6 +234,7 @@ case AUTH_REQUEST_STATUS_OK: client->auth_request = NULL; client->auth_successes++; + client->auth_passdb_args = p_strarray_dup(client->pool, args); nologin = FALSE; for (i = 0; args[i] != NULL; i++) {