Mercurial > dovecot > original-hg > dovecot-2.1
changeset 14952:c6b4a639cae1
quota-status: Unknown recipients caused a crash.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Fri, 05 Apr 2013 13:21:40 +0300 |
parents | c42846219939 |
children | 850b5d8bbcc9 |
files | src/plugins/quota/Makefile.am src/plugins/quota/quota-status.c |
diffstat | 2 files changed, 29 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/plugins/quota/Makefile.am Fri Apr 05 00:08:40 2013 +0300 +++ b/src/plugins/quota/Makefile.am Fri Apr 05 13:21:40 2013 +0300 @@ -5,6 +5,7 @@ AM_CPPFLAGS = \ -I$(top_srcdir)/src/lib \ + -I$(top_srcdir)/src/lib-settings \ -I$(top_srcdir)/src/lib-master \ -I$(top_srcdir)/src/lib-dict \ -I$(top_srcdir)/src/lib-index \
--- a/src/plugins/quota/quota-status.c Fri Apr 05 00:08:40 2013 +0300 +++ b/src/plugins/quota/quota-status.c Fri Apr 05 13:21:40 2013 +0300 @@ -4,7 +4,9 @@ #include "ostream.h" #include "connection.h" #include "restrict-access.h" +#include "settings-parser.h" #include "master-service.h" +#include "master-service-settings.h" #include "mail-namespace.h" #include "mail-storage.h" #include "mail-storage-settings.h" @@ -27,6 +29,7 @@ static enum quota_protocol protocol; static struct mail_storage_service_ctx *storage_service; static struct connection_list *clients; +static char *nouser_reply; static void client_connected(struct master_service_connection *conn) { @@ -94,9 +97,7 @@ &service_user, &user, &error); restrict_access_allow_coredumps(TRUE); if (ret == 0) { - value = mail_user_plugin_getenv(user, "quota_status_nouser"); - if (value == NULL) - value = "REJECT Unknown user"; + value = nouser_reply; } else if (ret > 0) { if ((ret = quota_check(user, client->size, &error)) > 0) { /* under quota */ @@ -173,16 +174,40 @@ static void main_init(void) { + struct mail_storage_service_input input; + const struct setting_parser_info *user_info; + const struct setting_parser_context *set_parser; + const struct mail_user_settings *user_set; + const char *value, *error; + pool_t pool; + clients = connection_list_init(&client_set, &client_vfuncs); storage_service = mail_storage_service_init(master_service, NULL, MAIL_STORAGE_SERVICE_FLAG_USERDB_LOOKUP | MAIL_STORAGE_SERVICE_FLAG_TEMP_PRIV_DROP | MAIL_STORAGE_SERVICE_FLAG_ENABLE_CORE_DUMPS | MAIL_STORAGE_SERVICE_FLAG_NO_CHDIR); + + memset(&input, 0, sizeof(input)); + input.service = "quota-status"; + input.module = "mail"; + input.username = ""; + + pool = pool_alloconly_create("service all settings", 4096); + if (mail_storage_service_read_settings(storage_service, &input, pool, + &user_info, &set_parser, + &error) < 0) + i_fatal("%s", error); + user_set = settings_parser_get_list(set_parser)[1]; + value = mail_user_set_plugin_getenv(user_set, "quota_status_nouser"); + nouser_reply = value != NULL ? i_strdup(value) : + i_strdup("REJECT Unknown user"); + pool_unref(&pool); } static void main_deinit(void) { + i_free(nouser_reply); connection_list_deinit(&clients); mail_storage_service_deinit(&storage_service); }