From: Timo Sirainen Date: Sun, 28 Jun 2009 02:08:48 +0000 (-0400) Subject: dict proxy: Use base_dir as the default dict-server location. X-Git-Tag: 2.0.alpha1~507 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4073f0dbf3277f981a8fcee3b89ea15aaf380a7f;p=thirdparty%2Fdovecot%2Fcore.git dict proxy: Use base_dir as the default dict-server location. --HG-- branch : HEAD --- diff --git a/src/dict/Makefile.am b/src/dict/Makefile.am index b00eaab33d..7b18b3e0aa 100644 --- a/src/dict/Makefile.am +++ b/src/dict/Makefile.am @@ -8,7 +8,8 @@ AM_CPPFLAGS = \ -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 diff --git a/src/dict/dict-connection.c b/src/dict/dict-connection.c index a687752436..f1b1f7f5da 100644 --- a/src/dict/dict-connection.c +++ b/src/dict/dict-connection.c @@ -82,7 +82,8 @@ static int dict_connection_dict_init(struct dict_connection *conn) } 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); diff --git a/src/dict/dict-settings.c b/src/dict/dict-settings.c index 570dac98ce..c962568fae 100644 --- a/src/dict/dict-settings.c +++ b/src/dict/dict-settings.c @@ -9,6 +9,7 @@ { 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 }, @@ -16,6 +17,7 @@ static struct setting_define dict_setting_defines[] = { }; struct dict_settings dict_default_settings = { + MEMBER(base_dir) PKG_RUNDIR, MEMBER(dict_db_config) "", MEMBER(dicts) ARRAY_INIT }; diff --git a/src/dict/dict-settings.h b/src/dict/dict-settings.h index e62f07435a..cb906e8db3 100644 --- a/src/dict/dict-settings.h +++ b/src/dict/dict-settings.h @@ -2,6 +2,7 @@ #define DICT_SETTINGS_H struct dict_settings { + const char *base_dir; const char *dict_db_config; ARRAY_DEFINE(dicts, const char *); }; diff --git a/src/lib-dict/Makefile.am b/src/lib-dict/Makefile.am index 344572113b..986c4e2ec3 100644 --- a/src/lib-dict/Makefile.am +++ b/src/lib-dict/Makefile.am @@ -7,7 +7,6 @@ AM_CPPFLAGS = \ -I$(top_srcdir)/src/lib \ -I$(top_srcdir)/src/lib-sql \ -I$(top_srcdir)/src/lib-settings \ - -DPKG_RUNDIR=\""$(rundir)"\" \ $(SQL_CFLAGS) base_sources = \ diff --git a/src/lib-dict/dict-client.c b/src/lib-dict/dict-client.c index 8fb8fb740c..e1481eb7da 100644 --- a/src/lib-dict/dict-client.c +++ b/src/lib-dict/dict-client.c @@ -297,7 +297,8 @@ static void client_dict_disconnect(struct client_dict *dict) 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; @@ -323,7 +324,8 @@ client_dict_init(struct dict *driver, const char *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; diff --git a/src/lib-dict/dict-client.h b/src/lib-dict/dict-client.h index eb0e7c5871..88d40ad9bb 100644 --- a/src/lib-dict/dict-client.h +++ b/src/lib-dict/dict-client.h @@ -3,7 +3,7 @@ #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 diff --git a/src/lib-dict/dict-db.c b/src/lib-dict/dict-db.c index 40d53044e2..ae3147c098 100644 --- a/src/lib-dict/dict-db.c +++ b/src/lib-dict/dict-db.c @@ -137,9 +137,10 @@ static int db_dict_open(struct db_dict *dict, const char *uri, 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; diff --git a/src/lib-dict/dict-file.c b/src/lib-dict/dict-file.c index 6ba82b75c1..085d651a58 100644 --- a/src/lib-dict/dict-file.c +++ b/src/lib-dict/dict-file.c @@ -66,7 +66,8 @@ static struct dotlock_settings file_dict_dotlock_settings = { 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; diff --git a/src/lib-dict/dict-private.h b/src/lib-dict/dict-private.h index e4df211f68..7f423e3ede 100644 --- a/src/lib-dict/dict-private.h +++ b/src/lib-dict/dict-private.h @@ -6,7 +6,7 @@ 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, diff --git a/src/lib-dict/dict-sql.c b/src/lib-dict/dict-sql.c index 10c740d5f3..2cc332540c 100644 --- a/src/lib-dict/dict-sql.c +++ b/src/lib-dict/dict-sql.c @@ -64,7 +64,7 @@ static void sql_dict_prev_inc_flush(struct sql_dict_transaction_context *ctx); 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; diff --git a/src/lib-dict/dict.c b/src/lib-dict/dict.c index 13939ba8b9..38f05666d4 100644 --- a/src/lib-dict/dict.c +++ b/src/lib-dict/dict.c @@ -64,7 +64,7 @@ void dict_drivers_unregister_builtin(void) } 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; @@ -85,7 +85,7 @@ struct dict *dict_init(const char *uri, enum dict_data_type value_type, } 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) diff --git a/src/lib-dict/dict.h b/src/lib-dict/dict.h index cb91e09828..d5dc8a615a 100644 --- a/src/lib-dict/dict.h +++ b/src/lib-dict/dict.h @@ -29,7 +29,7 @@ void dict_drivers_unregister_all(void); /* 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); diff --git a/src/plugins/acl/acl-lookup-dict.c b/src/plugins/acl/acl-lookup-dict.c index f0296d09fa..b6a4b6895a 100644 --- a/src/plugins/acl/acl-lookup-dict.c +++ b/src/plugins/acl/acl-lookup-dict.c @@ -44,7 +44,8 @@ struct acl_lookup_dict *acl_lookup_dict_init(struct mail_user *user) 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) { diff --git a/src/plugins/expire/expire-plugin.c b/src/plugins/expire/expire-plugin.c index c4ead8f266..9d107a047d 100644 --- a/src/plugins/expire/expire-plugin.c +++ b/src/plugins/expire/expire-plugin.c @@ -313,7 +313,8 @@ static void expire_mail_user_created(struct mail_user *user) 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 diff --git a/src/plugins/expire/expire-tool.c b/src/plugins/expire/expire-tool.c index bfc632684d..207d6d6bcf 100644 --- a/src/plugins/expire/expire-tool.c +++ b/src/plugins/expire/expire-tool.c @@ -196,7 +196,8 @@ static void expire_run(struct master_service *service, bool testrun) 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"); diff --git a/src/plugins/quota/quota-dict.c b/src/plugins/quota/quota-dict.c index ba71edbea9..94ba2f7c0d 100644 --- a/src/plugins/quota/quota-dict.c +++ b/src/plugins/quota/quota-dict.c @@ -72,7 +72,8 @@ static int dict_quota_init(struct quota_root *_root, const char *args) /* 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; }