]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
Allow to override lua paths from command line.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 7 Aug 2015 15:02:36 +0000 (16:02 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 7 Aug 2015 15:02:36 +0000 (16:02 +0100)
src/libserver/cfg_rcl.c
src/lua/lua_common.c

index bc60bfc66d81efbf3ccb6123d63967aa54ea5e9c..af7d5ef608aa9b04aaae851aaf6f45169f04cc5b 100644 (file)
@@ -661,10 +661,23 @@ 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_WWWDIR_INDEX "WWWDIR"
+#define RSPAMD_PREFIX_INDEX "PREFIX"
+#define RSPAMD_VERSION_INDEX "VERSION"
+
 static void
-rspamd_rcl_set_lua_globals (struct rspamd_config *cfg, lua_State *L)
+rspamd_rcl_set_lua_globals (struct rspamd_config *cfg, lua_State *L,
+               GHashTable *vars)
 {
        struct rspamd_config **pcfg;
+       GHashTableIter it;
+       gpointer k, v;
 
        /* First check for global variable 'config' */
        lua_getglobal (L, "config");
@@ -701,6 +714,31 @@ rspamd_rcl_set_lua_globals (struct rspamd_config *cfg, lua_State *L)
        lua_pop (L, 4);
 
        rspamd_lua_set_path (L, cfg);
+
+       /* Set known paths as rspamd_paths global */
+       lua_getglobal (L, "rspamd_paths");
+       if (lua_isnil (L, -1)) {
+               lua_newtable (L);
+               rspamd_lua_table_set (L, RSPAMD_CONFDIR_INDEX, RSPAMD_CONFDIR);
+               rspamd_lua_table_set (L, RSPAMD_RUNDIR_INDEX, RSPAMD_RUNDIR);
+               rspamd_lua_table_set (L, RSPAMD_DBDIR_INDEX, RSPAMD_DBDIR);
+               rspamd_lua_table_set (L, RSPAMD_LOGDIR_INDEX, RSPAMD_LOGDIR);
+               rspamd_lua_table_set (L, RSPAMD_WWWDIR_INDEX, RSPAMD_WWWDIR);
+               rspamd_lua_table_set (L, RSPAMD_PLUGINSDIR_INDEX, RSPAMD_PLUGINSDIR);
+               rspamd_lua_table_set (L, RSPAMD_RULESDIR_INDEX, RSPAMD_RULESDIR);
+               rspamd_lua_table_set (L, RSPAMD_PREFIX_INDEX, RSPAMD_PREFIX);
+
+               /* Override from vars if needed */
+               if (vars != NULL) {
+                       g_hash_table_iter_init (&it, vars);
+
+                       while (g_hash_table_iter_next (&it, &k, &v)) {
+                               rspamd_lua_table_set (L, k, v);
+                       }
+               }
+
+               lua_setglobal (L, "rspamd_paths");
+       }
 }
 
 static gboolean
@@ -738,7 +776,6 @@ rspamd_rcl_lua_handler (rspamd_mempool_t *pool, const ucl_object_t *obj,
                                g_free (tmp2);
                                return FALSE;
                        }
-                       rspamd_rcl_set_lua_globals (cfg, L);
                        /* Now do it */
                        if (lua_pcall (L, 0, LUA_MULTRET, 0) != 0) {
                                g_set_error (err,
@@ -2298,6 +2335,7 @@ rspamd_config_read (struct rspamd_config *cfg, const gchar *filename,
        ucl_parser_free (parser);
 
        top = rspamd_rcl_config_init ();
+       rspamd_rcl_set_lua_globals (cfg, cfg->lua_state, vars);
        err = NULL;
 
        if (logger_fin != NULL) {
index 6526b3b53ecf84d1d655549c0d4237d885819f54..4d13ec27d2975172ae44b713436ee6164101c66d 100644 (file)
@@ -165,16 +165,6 @@ lua_add_actions_global (lua_State *L)
        lua_setglobal (L, "rspamd_actions");
 }
 
-#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_WWWDIR_INDEX "WWWDIR"
-#define RSPAMD_PREFIX_INDEX "PREFIX"
-#define RSPAMD_VERSION_INDEX "VERSION"
-
 void
 rspamd_lua_set_path (lua_State *L, struct rspamd_config *cfg)
 {
@@ -217,21 +207,6 @@ rspamd_lua_set_path (lua_State *L, struct rspamd_config *cfg)
        lua_pushstring (L, path_buf);
        lua_setfield (L, -2, "path");
        lua_pop (L, 1);
-
-       /* Set known paths as rspamd_paths global */
-       lua_getglobal (L, "rspamd_paths");
-       if (lua_isnil (L, -1)) {
-               lua_newtable (L);
-               rspamd_lua_table_set (L, RSPAMD_CONFDIR_INDEX, RSPAMD_CONFDIR);
-               rspamd_lua_table_set (L, RSPAMD_RUNDIR_INDEX, RSPAMD_RUNDIR);
-               rspamd_lua_table_set (L, RSPAMD_DBDIR_INDEX, RSPAMD_DBDIR);
-               rspamd_lua_table_set (L, RSPAMD_LOGDIR_INDEX, RSPAMD_LOGDIR);
-               rspamd_lua_table_set (L, RSPAMD_WWWDIR_INDEX, RSPAMD_WWWDIR);
-               rspamd_lua_table_set (L, RSPAMD_PLUGINSDIR_INDEX, RSPAMD_PLUGINSDIR);
-               rspamd_lua_table_set (L, RSPAMD_RULESDIR_INDEX, RSPAMD_RULESDIR);
-               rspamd_lua_table_set (L, RSPAMD_PREFIX_INDEX, RSPAMD_PREFIX);
-               lua_setglobal (L, "rspamd_paths");
-       }
 }
 
 lua_State *