Mercurial > dovecot > core-2.2
changeset 19679:74f8b5be8f59
last-login: Added last_login_precision setting
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Fri, 29 Jan 2016 16:23:57 +0200 |
parents | 338dd0ac1375 |
children | 55831f9d2e66 |
files | src/plugins/last-login/last-login-plugin.c |
diffstat | 1 files changed, 20 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/plugins/last-login/last-login-plugin.c Fri Jan 29 16:07:35 2016 +0200 +++ b/src/plugins/last-login/last-login-plugin.c Fri Jan 29 16:23:57 2016 +0200 @@ -63,7 +63,7 @@ struct dict *dict; struct dict_settings set; struct dict_transaction_context *trans; - const char *dict_value, *key_name, *error; + const char *dict_value, *key_name, *precision, *error; if (user->autocreated) { /* we want to handle only logged in users, @@ -101,8 +101,26 @@ } key_name = t_strconcat(DICT_PATH_SHARED, key_name, NULL); + precision = mail_user_plugin_getenv(user, "last_login_precision"); + trans = dict_transaction_begin(dict); - dict_set(trans, key_name, dec2str(ioloop_time)); + if (precision == NULL || strcmp(precision, "s") == 0) + dict_set(trans, key_name, dec2str(ioloop_time)); + else if (strcmp(precision, "ms") == 0) { + dict_set(trans, key_name, t_strdup_printf( + "%ld%03u", (long)ioloop_timeval.tv_sec, + (unsigned int)(ioloop_timeval.tv_usec/1000))); + } else if (strcmp(precision, "us") == 0) { + dict_set(trans, key_name, t_strdup_printf( + "%ld%06u", (long)ioloop_timeval.tv_sec, + (unsigned int)ioloop_timeval.tv_usec)); + } else if (strcmp(precision, "ns") == 0) { + dict_set(trans, key_name, t_strdup_printf( + "%ld%06u000", (long)ioloop_timeval.tv_sec, + (unsigned int)ioloop_timeval.tv_usec)); + } else { + i_error("last_login_dict: Invalid last_login_precision '%s'", precision); + } dict_transaction_commit_async(&trans, last_login_dict_commit, user); }