#ifndef MAIL_USER_H
#define MAIL_USER_H
#include "mail-storage-settings.h"
struct module;
struct mail_user;
struct mail_user_vfuncs {
void (*deinit)(struct mail_user *user);
};
struct mail_user {
pool_t pool;
struct mail_user_vfuncs v, *vlast;
int refcount;
const char *username;
const char *_home;
const char *_sieve_dir;
uid_t uid;
const char *service;
struct ip_addr *local_ip, *remote_ip;
const struct var_expand_table *var_expand_table;
const char *error;
const struct setting_parser_info *set_info;
const struct mail_user_settings *unexpanded_set;
struct mail_user_settings *set;
struct mail_namespace *namespaces;
struct mail_storage *storages;
ARRAY_DEFINE(hooks, const struct mail_storage_hooks *);
ARRAY_DEFINE(module_contexts, union mail_user_module_context *);
unsigned int home_looked_up:1;
unsigned int sieve_dir_looked_up:1;
unsigned int admin:1;
unsigned int initialized:1;
unsigned int mail_debug:1;
unsigned int inbox_open_error_logged:1;
};
struct mail_user_module_register {
unsigned int id;
};
union mail_user_module_context {
struct mail_user_vfuncs super;
struct mail_user_module_register *reg;
};
extern struct mail_user_module_register mail_user_module_register;
extern struct auth_master_connection *mail_user_auth_master_conn;
struct mail_user *mail_user_alloc(const char *username,
const struct setting_parser_info *set_info,
const struct mail_user_settings *set);
int mail_user_init(struct mail_user *user, const char **error_r);
void mail_user_ref(struct mail_user *user);
void mail_user_unref(struct mail_user **user);
struct mail_user *mail_user_find(struct mail_user *user, const char *name);
void mail_user_set_vars(struct mail_user *user, uid_t uid, const char *service,
const struct ip_addr *local_ip,
const struct ip_addr *remote_ip);
const struct var_expand_table *
mail_user_var_expand_table(struct mail_user *user);
void mail_user_set_home(struct mail_user *user, const char *home);
int mail_user_get_home(struct mail_user *user, const char **home_r);
int mail_user_get_sieve_dir(struct mail_user *user, const char **dir_r);
void mail_user_set_get_temp_prefix(string_t *dest,
const struct mail_user_settings *set);
bool mail_user_is_plugin_loaded(struct mail_user *user, struct module *module);
const char *mail_user_plugin_getenv(struct mail_user *user, const char *name);
const char *mail_user_set_plugin_getenv(const struct mail_user_settings *set,
const char *name);
void mail_user_add_namespace(struct mail_user *user,
struct mail_namespace **namespaces);
void mail_user_drop_useless_namespaces(struct mail_user *user);
const char *mail_user_home_expand(struct mail_user *user, const char *path);
int mail_user_try_home_expand(struct mail_user *user, const char **path);
const char *mail_user_get_anvil_userip_ident(struct mail_user *user);
#endif