-I$(top_srcdir)/src/lib-settings \
-I$(top_srcdir)/src/lib-dict \
-I$(top_srcdir)/src/lib-sql \
- -DDICT_MODULE_DIR=\""$(moduledir)/dict"\"
+ -DDICT_MODULE_DIR=\""$(moduledir)/dict"\" \
+ -DPKG_RUNDIR=\""$(rundir)"\"
dict_LDFLAGS = -export-dynamic
}
uri = strlist[i+1];
- conn->dict = dict_init(uri, conn->value_type, conn->username);
+ conn->dict = dict_init(uri, conn->value_type, conn->username,
+ dict_settings->base_dir);
if (conn->dict == NULL) {
/* dictionary initialization failed */
i_error("Failed to initialize dictionary '%s'", conn->name);
{ type, #name, offsetof(struct dict_settings, name), NULL }
static struct setting_define dict_setting_defines[] = {
+ DEF(SET_STR, base_dir),
DEF(SET_STR, dict_db_config),
{ SET_STRLIST, "dict", offsetof(struct dict_settings, dicts), NULL },
};
struct dict_settings dict_default_settings = {
+ MEMBER(base_dir) PKG_RUNDIR,
MEMBER(dict_db_config) "",
MEMBER(dicts) ARRAY_INIT
};
#define DICT_SETTINGS_H
struct dict_settings {
+ const char *base_dir;
const char *dict_db_config;
ARRAY_DEFINE(dicts, const char *);
};
-I$(top_srcdir)/src/lib \
-I$(top_srcdir)/src/lib-sql \
-I$(top_srcdir)/src/lib-settings \
- -DPKG_RUNDIR=\""$(rundir)"\" \
$(SQL_CFLAGS)
base_sources = \
static struct dict *
client_dict_init(struct dict *driver, const char *uri,
- enum dict_data_type value_type, const char *username)
+ enum dict_data_type value_type, const char *username,
+ const char *base_dir)
{
struct client_dict *dict;
const char *dest_uri;
/* path given */
dict->path = p_strdup_until(pool, uri, dest_uri);
} else {
- dict->path = DEFAULT_DICT_SERVER_SOCKET_PATH;
+ dict->path = p_strconcat(pool, base_dir,
+ "/"DEFAULT_DICT_SERVER_SOCKET_FNAME, NULL);
}
dict->uri = p_strdup(pool, dest_uri + 1);
return &dict->dict;
#include "dict.h"
-#define DEFAULT_DICT_SERVER_SOCKET_PATH PKG_RUNDIR"/dict"
+#define DEFAULT_DICT_SERVER_SOCKET_FNAME "dict-server"
#define DICT_CLIENT_PROTOCOL_MAJOR_VERSION 2
#define DICT_CLIENT_PROTOCOL_MINOR_VERSION 0
return 0;
}
-static struct dict *db_dict_init(struct dict *driver, const char *uri,
- enum dict_data_type value_type,
- const char *username)
+static struct dict *
+db_dict_init(struct dict *driver, const char *uri,
+ enum dict_data_type value_type,
+ const char *username, const char *base_dir ATTR_UNUSED)
{
struct db_dict *dict;
pool_t pool;
static struct dict *file_dict_init(struct dict *driver, const char *uri,
enum dict_data_type value_type ATTR_UNUSED,
- const char *username ATTR_UNUSED)
+ const char *username ATTR_UNUSED,
+ const char *base_dir ATTR_UNUSED)
{
struct file_dict *dict;
struct dict_vfuncs {
struct dict *(*init)(struct dict *dict_driver, const char *uri,
enum dict_data_type value_type,
- const char *username);
+ const char *username, const char *base_dir);
void (*deinit)(struct dict *dict);
int (*lookup)(struct dict *dict, pool_t pool,
static struct dict *
sql_dict_init(struct dict *driver, const char *uri,
enum dict_data_type value_type ATTR_UNUSED,
- const char *username)
+ const char *username, const char *base_dir ATTR_UNUSED)
{
struct sql_dict *dict;
pool_t pool;
}
struct dict *dict_init(const char *uri, enum dict_data_type value_type,
- const char *username)
+ const char *username, const char *base_dir)
{
struct dict *dict;
const char *p, *name;
} T_END;
return dict == NULL ? NULL :
- dict->v.init(dict, p+1, value_type, username);
+ dict->v.init(dict, p+1, value_type, username, base_dir);
}
void dict_deinit(struct dict **_dict)
/* Open dictionary with given URI (type:data).
If URI is invalid, returns NULL. */
struct dict *dict_init(const char *uri, enum dict_data_type value_type,
- const char *username);
+ const char *username, const char *base_dir);
/* Close dictionary. */
void dict_deinit(struct dict **dict);
uri = mail_user_plugin_getenv(user, "acl_shared_dict");
if (uri != NULL) {
- dict->dict = dict_init(uri, DICT_DATA_TYPE_STRING, "");
+ dict->dict = dict_init(uri, DICT_DATA_TYPE_STRING, "",
+ user->set->base_dir);
if (dict->dict == NULL)
i_error("acl: dict_init(%s) failed", uri);
} else if (user->mail_debug) {
euser->env = expire_env_init(expunge_env, altmove_env);
/* we're using only shared dictionary, the username
doesn't matter. */
- euser->db = dict_init(dict_uri, DICT_DATA_TYPE_UINT32, "");
+ euser->db = dict_init(dict_uri, DICT_DATA_TYPE_UINT32, "",
+ user->set->base_dir);
if (euser->db == NULL)
i_error("expire plugin: dict_init(%s) failed", dict_uri);
else
ctx.testrun = testrun;
env = expire_env_init(expire, expire_altmove);
- dict = dict_init(expire_dict, DICT_DATA_TYPE_UINT32, "");
+ dict = dict_init(expire_dict, DICT_DATA_TYPE_UINT32, "",
+ user_set->base_dir);
if (dict == NULL)
i_fatal("dict_init() failed");
/* FIXME: we should use 64bit integer as datatype instead but before
it can actually be used don't bother */
- root->dict = dict_init(args, DICT_DATA_TYPE_STRING, username);
+ root->dict = dict_init(args, DICT_DATA_TYPE_STRING, username,
+ _root->quota->user->set->base_dir);
return root->dict != NULL ? 0 : -1;
}