fts_backend_solr_init(struct fts_backend *_backend, const char **error_r)
{
struct solr_fts_backend *backend = (struct solr_fts_backend *)_backend;
- struct fts_solr_user *fuser = FTS_SOLR_USER_CONTEXT(_backend->ns->user);
+ struct fts_solr_user *fuser;
- if (fuser == NULL) {
- *error_r = "Invalid fts_solr setting";
+ if (fts_solr_mail_user_get(_backend->ns->user, &fuser, error_r) < 0)
return -1;
- }
backend->event = event_create(_backend->event);
event_add_category(backend->event, &event_category_fts_solr);
fuser->module_ctx.super.deinit(user);
}
-static void fts_solr_mail_user_created(struct mail_user *user)
+int fts_solr_mail_user_get(struct mail_user *user,
+ struct fts_solr_user **fuser_r,
+ const char **error_r)
{
- struct mail_user_vfuncs *v = user->vlast;
- struct fts_solr_user *fuser;
- const char *error;
+ struct fts_solr_user *fuser = FTS_SOLR_USER_CONTEXT(user);
const struct fts_solr_settings *set;
if (fts_solr_settings_get(user->event, &fts_solr_setting_parser_info,
- &set, &error) < 0) {
- e_error(user->event, "fts-solr: %s", error);
- return;
- }
+ &set, error_r) < 0)
+ return -1;
- if (fts_mail_user_init(user, FALSE, &error) < 0) {
- e_error(user->event, "fts-solr: %s", error);
+ /* Reference the user even when fuser is already initialized */
+ if (fts_mail_user_init(user, FALSE, error_r) < 0) {
settings_free(set);
- return;
+ return -1;
}
+ if (fuser->set == NULL)
+ fuser->set = set;
+ else
+ settings_free(set);
+
+ *fuser_r = fuser;
+ return 0;
+}
+
+static void fts_solr_mail_user_created(struct mail_user *user)
+{
+ struct mail_user_vfuncs *v = user->vlast;
+ struct fts_solr_user *fuser;
fuser = p_new(user->pool, struct fts_solr_user, 1);
- fuser->set = set;
fuser->module_ctx.super = *v;
user->vlast = &fuser->module_ctx.super;
v->deinit = fts_solr_mail_user_deinit;
.mail_user_created = fts_solr_mail_user_created
};
-void fts_solr_plugin_init(struct module *module)
+void fts_solr_plugin_init(struct module *module ATTR_UNUSED)
{
fts_backend_register(&fts_backend_solr);
mail_storage_hooks_add(module, &fts_solr_mail_storage_hooks);
extern MODULE_CONTEXT_DEFINE(fts_solr_user_module, &mail_user_module_register);
extern struct http_client *solr_http_client;
+int fts_solr_mail_user_get(struct mail_user *user,
+ struct fts_solr_user **fuser_r,
+ const char **error_r);
+
void fts_solr_plugin_init(struct module *module);
void fts_solr_plugin_deinit(void);