Mercurial > dovecot > core-2.2
changeset 22407:40c49a64616d
quota-status: Support recipient_delimiter
author | Aki Tuomi <aki.tuomi@dovecot.fi> |
---|---|
date | Mon, 03 Jul 2017 18:40:47 +0300 |
parents | 8b81cd47ede8 |
children | a55322dacd7d |
files | src/plugins/quota/Makefile.am src/plugins/quota/quota-status-settings.c src/plugins/quota/quota-status-settings.h src/plugins/quota/quota-status.c |
diffstat | 4 files changed, 70 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/plugins/quota/Makefile.am Mon Jul 03 18:31:56 2017 +0300 +++ b/src/plugins/quota/Makefile.am Mon Jul 03 18:40:47 2017 +0300 @@ -62,7 +62,8 @@ doveadm-quota.c quota_status_SOURCES = \ - quota-status.c + quota-status.c \ + quota-status-settings.c quota_status_LDADD = \ $(quota_common_objects) \ @@ -104,6 +105,8 @@ quota-fs.h \ quota-plugin.h \ quota-private.h +noinst_HEADERS = \ + quota-status-settings.h EXTRA_DIST = rquota.x
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/plugins/quota/quota-status-settings.c Mon Jul 03 18:40:47 2017 +0300 @@ -0,0 +1,37 @@ +/* Copyright (c) 2017 Dovecot authors, see the included COPYING file */ + +#include "lib.h" +#include "settings-parser.h" +#include "service-settings.h" +#include "mail-storage-settings.h" +#include "quota-status-settings.h" + +#undef DEF +#define DEF(type, name) \ + { type, #name, offsetof(struct quota_status_settings, name), NULL } + +static const struct setting_define quota_status_setting_defines[] = { + DEF(SET_STR, recipient_delimiter), + + SETTING_DEFINE_LIST_END +}; + +static const struct quota_status_settings quota_status_default_settings = { + .recipient_delimiter = "+", +}; + +static const struct setting_parser_info *quota_status_setting_dependencies[] = { + NULL +}; + +const struct setting_parser_info quota_status_setting_parser_info = { + .module_name = "mail", + .defines = quota_status_setting_defines, + .defaults = "a_status_default_settings, + + .type_offset = (size_t)-1, + .struct_size = sizeof(struct quota_status_settings), + + .parent_offset = (size_t)-1, + .dependencies = quota_status_setting_dependencies +};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/plugins/quota/quota-status-settings.h Mon Jul 03 18:40:47 2017 +0300 @@ -0,0 +1,10 @@ +#ifndef QUOTA_STATUS_SETTINGS_H +#define QUOTA_STATUS_SETTINGS_H 1 + +struct quota_status_settings { + char *recipient_delimiter; +}; + +extern const struct setting_parser_info quota_status_setting_parser_info; + +#endif
--- a/src/plugins/quota/quota-status.c Mon Jul 03 18:31:56 2017 +0300 +++ b/src/plugins/quota/quota-status.c Mon Jul 03 18:40:47 2017 +0300 @@ -4,14 +4,17 @@ #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" #include "mail-storage-service.h" +#include "message-address.h" #include "quota-private.h" #include "quota-plugin.h" +#include "quota-status-settings.h" enum quota_protocol { QUOTA_PROTOCOL_UNKNOWN = 0, @@ -25,6 +28,7 @@ uoff_t size; }; +static struct quota_status_settings *quota_status_settings; static pool_t quota_status_pool; static enum quota_protocol protocol; static struct mail_storage_service_ctx *storage_service; @@ -79,6 +83,8 @@ struct mail_storage_service_user *service_user; struct mail_user *user; const char *value = NULL, *error; + const char *detail ATTR_UNUSED; + char delim ATTR_UNUSED; int ret; if (client->recipient == NULL) { @@ -87,8 +93,9 @@ } i_zero(&input); - input.username = client->recipient; - + message_detail_address_parse(quota_status_settings->recipient_delimiter, + client->recipient, &input.username, &delim, + &detail); ret = mail_storage_service_lookup_next(storage_service, &input, &service_user, &user, &error); restrict_access_allow_coredumps(TRUE); @@ -186,15 +193,20 @@ static void main_init(void) { + static const struct setting_parser_info *set_roots[] = { + "a_status_setting_parser_info, + NULL + }; 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 struct quota_status_settings *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, + storage_service = mail_storage_service_init(master_service, set_roots, MAIL_STORAGE_SERVICE_FLAG_USERDB_LOOKUP | MAIL_STORAGE_SERVICE_FLAG_TEMP_PRIV_DROP | MAIL_STORAGE_SERVICE_FLAG_ENABLE_CORE_DUMPS | @@ -213,6 +225,10 @@ i_fatal("%s", error); user_set = master_service_settings_parser_get_others(master_service, set_parser)[0]; + set = master_service_settings_get_others(master_service)[1]; + + quota_status_settings = settings_dup("a_status_setting_parser_info, set, + quota_status_pool); value = mail_user_set_plugin_getenv(user_set, "quota_status_nouser"); nouser_reply = p_strdup(quota_status_pool, value != NULL ? value : "REJECT Unknown user");