aboutsummaryrefslogtreecommitdiffstats
path: root/src/libserver
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2018-05-26 19:31:29 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2018-05-26 19:31:29 +0100
commit4734176fe1719865d3222aebd6bf3c294349226e (patch)
treeb36f9246764092a0e24dfe71df7b6b5546515536 /src/libserver
parent582e212af4385fdaeb2e209fde6cb5a795a29a3a (diff)
downloadrspamd-4734176fe1719865d3222aebd6bf3c294349226e.tar.gz
rspamd-4734176fe1719865d3222aebd6bf3c294349226e.zip
[Minor] Move lua globals setup to a more appropriate place
Diffstat (limited to 'src/libserver')
-rw-r--r--src/libserver/cfg_rcl.c316
1 files changed, 1 insertions, 315 deletions
diff --git a/src/libserver/cfg_rcl.c b/src/libserver/cfg_rcl.c
index 62f9e3bef..abb0e9eef 100644
--- a/src/libserver/cfg_rcl.c
+++ b/src/libserver/cfg_rcl.c
@@ -623,320 +623,6 @@ rspamd_rcl_worker_handler (rspamd_mempool_t *pool, const ucl_object_t *obj,
return TRUE;
}
-#define RSPAMD_CONFDIR_INDEX "CONFDIR"
-#define RSPAMD_RUNDIR_INDEX "RUNDIR"
-#define RSPAMD_DBDIR_INDEX "DBDIR"
-#define RSPAMD_LOGDIR_INDEX "LOGDIR"
-#define RSPAMD_PLUGINSDIR_INDEX "PLUGINSDIR"
-#define RSPAMD_RULESDIR_INDEX "RULESDIR"
-#define RSPAMD_LUALIBDIR_INDEX "LUALIBDIR"
-#define RSPAMD_WWWDIR_INDEX "WWWDIR"
-#define RSPAMD_PREFIX_INDEX "PREFIX"
-#define RSPAMD_VERSION_INDEX "VERSION"
-
-static gint
-rspamd_rcl_cmp_components (const gchar *comp1, const gchar *comp2)
-{
- guint v1, v2;
-
- v1 = strtoul (comp1, NULL, 10);
- v2 = strtoul (comp2, NULL, 10);
-
- return v1 - v2;
-}
-
-static int
-rspamd_rcl_lua_version_cmp (lua_State *L)
-{
- const gchar *ver;
- gchar **components;
- gint ret = 0;
-
- if (lua_type (L, 2) == LUA_TSTRING) {
- ver = lua_tostring (L, 2);
-
- components = g_strsplit_set (ver, ".-_", -1);
-
- if (!components) {
- return luaL_error (L, "invalid arguments to 'cmp': %s", ver);
- }
-
- if (components[0]) {
- ret = rspamd_rcl_cmp_components (components[0], RSPAMD_VERSION_MAJOR);
- }
-
- if (ret) {
- goto set;
- }
-
- if (components[1]) {
- ret = rspamd_rcl_cmp_components (components[1], RSPAMD_VERSION_MINOR);
- }
-
- if (ret) {
- goto set;
- }
-
- if (components[2]) {
- ret = rspamd_rcl_cmp_components (components[2], RSPAMD_VERSION_PATCH);
- }
-
- /*
- * XXX: we don't compare git releases assuming that it is meaningless
- */
- }
- else {
- return luaL_error (L, "invalid arguments to 'cmp'");
- }
-
-set:
- g_strfreev (components);
- lua_pushnumber (L, ret);
-
- return 1;
-}
-
-static int
-rspamd_rcl_lua_version_numeric (lua_State *L)
-{
- static gint64 version_num = RSPAMD_VERSION_NUM;
- const gchar *type;
-
- if (lua_gettop (L) >= 2 && lua_type (L, 1) == LUA_TSTRING) {
- type = lua_tostring (L, 1);
- if (g_ascii_strcasecmp (type, "short") == 0) {
- version_num = RSPAMD_VERSION_MAJOR_NUM * 1000 +
- RSPAMD_VERSION_MINOR_NUM * 100 + RSPAMD_VERSION_PATCH_NUM * 10;
- }
- else if (g_ascii_strcasecmp (type, "main") == 0) {
- version_num = RSPAMD_VERSION_MAJOR_NUM * 1000 +
- RSPAMD_VERSION_MINOR_NUM * 100;
- }
- else if (g_ascii_strcasecmp (type, "major") == 0) {
- version_num = RSPAMD_VERSION_MAJOR_NUM;
- }
- else if (g_ascii_strcasecmp (type, "minor") == 0) {
- version_num = RSPAMD_VERSION_MINOR_NUM;
- }
- else if (g_ascii_strcasecmp (type, "patch") == 0) {
- version_num = RSPAMD_VERSION_PATCH_NUM;
- }
- }
-
- lua_pushnumber (L, version_num);
-
- return 1;
-}
-
-static int
-rspamd_rcl_lua_version (lua_State *L)
-{
- const gchar *result = NULL, *type;
-
- if (lua_gettop (L) == 0) {
- result = RVERSION;
- }
- else if (lua_gettop (L) >= 1 && lua_type (L, 1) == LUA_TSTRING) {
- /* We got something like string */
- type = lua_tostring (L, 1);
-
- if (g_ascii_strcasecmp (type, "short") == 0) {
- result = RSPAMD_VERSION_MAJOR
- "." RSPAMD_VERSION_MINOR
- "." RSPAMD_VERSION_PATCH;
- }
- else if (g_ascii_strcasecmp (type, "main") == 0) {
- result = RSPAMD_VERSION_MAJOR "." RSPAMD_VERSION_MINOR;
- }
- else if (g_ascii_strcasecmp (type, "major") == 0) {
- result = RSPAMD_VERSION_MAJOR;
- }
- else if (g_ascii_strcasecmp (type, "minor") == 0) {
- result = RSPAMD_VERSION_MINOR;
- }
- else if (g_ascii_strcasecmp (type, "patch") == 0) {
- result = RSPAMD_VERSION_PATCH;
- }
- else if (g_ascii_strcasecmp (type, "id") == 0) {
- result = RID;
- }
- else if (g_ascii_strcasecmp (type, "num") == 0) {
- return rspamd_rcl_lua_version_numeric (L);
- }
- else if (g_ascii_strcasecmp (type, "cmp") == 0) {
- return rspamd_rcl_lua_version_cmp (L);
- }
- }
-
- lua_pushstring (L, result);
-
- return 1;
-}
-
-static void
-rspamd_rcl_set_lua_globals (struct rspamd_config *cfg, lua_State *L,
- GHashTable *vars)
-{
- struct rspamd_config **pcfg;
-
- /* First check for global variable 'config' */
- lua_getglobal (L, "config");
- if (lua_isnil (L, -1)) {
- /* Assign global table to set up attributes */
- lua_newtable (L);
- lua_setglobal (L, "config");
- }
-
- lua_getglobal (L, "metrics");
- if (lua_isnil (L, -1)) {
- lua_newtable (L);
- lua_setglobal (L, "metrics");
- }
-
- lua_getglobal (L, "composites");
- if (lua_isnil (L, -1)) {
- lua_newtable (L);
- lua_setglobal (L, "composites");
- }
-
- lua_getglobal (L, "rspamd_classifiers");
- if (lua_isnil (L, -1)) {
- lua_newtable (L);
- lua_setglobal (L, "rspamd_classifiers");
- }
-
- lua_getglobal (L, "classifiers");
- if (lua_isnil (L, -1)) {
- lua_newtable (L);
- lua_setglobal (L, "classifiers");
- }
-
- lua_getglobal (L, "rspamd_version");
- if (lua_isnil (L, -1)) {
- lua_pushcfunction (L, rspamd_rcl_lua_version);
- lua_setglobal (L, "rspamd_version");
- }
-
- pcfg = lua_newuserdata (L, sizeof (struct rspamd_config *));
- rspamd_lua_setclass (L, "rspamd{config}", -1);
- *pcfg = cfg;
- lua_setglobal (L, "rspamd_config");
-
- /* Clear stack from globals */
- lua_pop (L, 4);
-
- rspamd_lua_set_path (L, cfg->rcl_obj, vars);
-
- /* Set known paths as rspamd_paths global */
- lua_getglobal (L, "rspamd_paths");
- if (lua_isnil (L, -1)) {
- const gchar *confdir = RSPAMD_CONFDIR, *rundir = RSPAMD_RUNDIR,
- *dbdir = RSPAMD_DBDIR, *logdir = RSPAMD_LOGDIR,
- *wwwdir = RSPAMD_WWWDIR, *pluginsdir = RSPAMD_PLUGINSDIR,
- *rulesdir = RSPAMD_RULESDIR, *lualibdir = RSPAMD_LUALIBDIR,
- *prefix = RSPAMD_PREFIX;
- const gchar *t;
-
- /* Try environment */
- t = getenv ("PLUGINSDIR");
- if (t) {
- pluginsdir = t;
- }
-
- t = getenv ("RULESDIR");
- if (t) {
- rulesdir = t;
- }
-
- t = getenv ("DBDIR");
- if (t) {
- dbdir = t;
- }
-
- t = getenv ("RUNDIR");
- if (t) {
- rundir = t;
- }
-
- t = getenv ("LUALIBDIR");
- if (t) {
- lualibdir = t;
- }
-
- t = getenv ("LOGDIR");
- if (t) {
- logdir = t;
- }
-
- t = getenv ("WWWDIR");
- if (t) {
- wwwdir = t;
- }
-
- t = getenv ("CONFDIR");
- if (t) {
- confdir = t;
- }
-
-
- if (vars) {
- t = g_hash_table_lookup (vars, "PLUGINSDIR");
- if (t) {
- pluginsdir = t;
- }
-
- t = g_hash_table_lookup (vars, "RULESDIR");
- if (t) {
- rulesdir = t;
- }
-
- t = g_hash_table_lookup (vars, "LUALIBDIR");
- if (t) {
- lualibdir = t;
- }
-
- t = g_hash_table_lookup (vars, "RUNDIR");
- if (t) {
- rundir = t;
- }
-
- t = g_hash_table_lookup (vars, "WWWDIR");
- if (t) {
- wwwdir = t;
- }
-
- t = g_hash_table_lookup (vars, "CONFDIR");
- if (t) {
- confdir = t;
- }
-
- t = g_hash_table_lookup (vars, "DBDIR");
- if (t) {
- dbdir = t;
- }
-
- t = g_hash_table_lookup (vars, "LOGDIR");
- if (t) {
- logdir = t;
- }
- }
-
- lua_createtable (L, 0, 9);
-
- rspamd_lua_table_set (L, RSPAMD_CONFDIR_INDEX, confdir);
- rspamd_lua_table_set (L, RSPAMD_RUNDIR_INDEX, rundir);
- rspamd_lua_table_set (L, RSPAMD_DBDIR_INDEX, dbdir);
- rspamd_lua_table_set (L, RSPAMD_LOGDIR_INDEX, logdir);
- rspamd_lua_table_set (L, RSPAMD_WWWDIR_INDEX, wwwdir);
- rspamd_lua_table_set (L, RSPAMD_PLUGINSDIR_INDEX, pluginsdir);
- rspamd_lua_table_set (L, RSPAMD_RULESDIR_INDEX, rulesdir);
- rspamd_lua_table_set (L, RSPAMD_LUALIBDIR_INDEX, lualibdir);
- rspamd_lua_table_set (L, RSPAMD_PREFIX_INDEX, prefix);
-
- lua_setglobal (L, "rspamd_paths");
- }
-}
-
static gboolean
rspamd_rcl_lua_handler (rspamd_mempool_t *pool, const ucl_object_t *obj,
const gchar *key, gpointer ud,
@@ -3740,7 +3426,7 @@ rspamd_config_read (struct rspamd_config *cfg, const gchar *filename,
top = rspamd_rcl_config_init (cfg);
rspamd_lua_set_path (cfg->lua_state, cfg->rcl_obj, vars);
- rspamd_rcl_set_lua_globals (cfg, cfg->lua_state, vars);
+ rspamd_lua_set_globals (cfg, cfg->lua_state, vars);
rspamd_mempool_add_destructor (cfg->cfg_pool, rspamd_rcl_section_free, top);
err = NULL;