]> source.dussan.org Git - rspamd.git/commitdiff
Use modules preload for lua.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 25 Aug 2014 12:17:21 +0000 (13:17 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 25 Aug 2014 12:17:21 +0000 (13:17 +0100)
18 files changed:
src/lua/lua_buffer.c
src/lua/lua_cdb.c
src/lua/lua_classifier.c
src/lua/lua_common.c
src/lua/lua_common.h
src/lua/lua_config.c
src/lua/lua_dns.c
src/lua/lua_http.c
src/lua/lua_ip.c
src/lua/lua_mempool.c
src/lua/lua_message.c
src/lua/lua_redis.c
src/lua/lua_regexp.c
src/lua/lua_rsa.c
src/lua/lua_session.c
src/lua/lua_task.c
src/lua/lua_upstream.c
src/lua/lua_xmlrpc.c

index 97598e606c15e8f67ba61f8e27cf279e360702ea..ee64a84ab8356c1380e3a1f09f8b0f0e58833afc 100644 (file)
@@ -26,7 +26,7 @@
 
 /* Public prototypes */
 struct rspamd_io_dispatcher_s * lua_check_io_dispatcher (lua_State * L);
-gint luaopen_io_dispatcher (lua_State * L);
+void luaopen_io_dispatcher (lua_State * L);
 
 /* Lua bindings */
 LUA_FUNCTION_DEF (io_dispatcher, create);
@@ -344,8 +344,17 @@ lua_io_dispatcher_destroy (lua_State *L)
        return 1;
 }
 
+static gint
+lua_load_dispatcher (lua_State *L)
+{
+       lua_newtable (L);
+       luaL_register (L, NULL, io_dispatcherlib_f);
+
+       return 1;
+}
 
-gint
+
+void
 luaopen_io_dispatcher (lua_State * L)
 {
        luaL_newmetatable (L, "rspamd{io_dispatcher}");
@@ -358,14 +367,11 @@ luaopen_io_dispatcher (lua_State * L)
        lua_rawset (L, -3);
 
        luaL_register (L, NULL,                                   io_dispatcherlib_m);
-       luaL_register (L, "rspamd_io_dispatcher", io_dispatcherlib_f);
-
        lua_pop (L, 1);                      /* remove metatable from stack */
+       rspamd_lua_add_preload (L, "rspamd_io_dispatcher", lua_load_dispatcher);
 
        /* Simple event class */
        rspamd_lua_new_class (L, "rspamd{ev_base}", null_reg);
-       luaL_register (L, "rspamd_ev_base", null_reg);
-
        lua_pop (L, 1);                      /* remove metatable from stack */
 
        /* Set buffer types globals */
@@ -375,5 +381,4 @@ luaopen_io_dispatcher (lua_State * L)
        lua_setglobal (L, "IO_BUFFER_CHARACTER");
        lua_pushnumber (L, BUFFER_ANY);
        lua_setglobal (L, "IO_BUFFER_ANY");
-       return 1;
 }
index 2ede3c24cac00d3cc1105c6cb8a6b3fd2300c23d..48b091254b8ddb7c9710cdb06c3cb23799497a23 100644 (file)
@@ -146,7 +146,16 @@ lua_cdb_destroy (lua_State *L)
        return 0;
 }
 
-gint
+static gint
+lua_load_cdb (lua_State *L)
+{
+       lua_newtable (L);
+       luaL_register (L, NULL, cdblib_f);
+
+       return 1;
+}
+
+void
 luaopen_cdb (lua_State * L)
 {
        luaL_newmetatable (L, "rspamd{cdb}");
@@ -159,9 +168,7 @@ luaopen_cdb (lua_State * L)
        lua_rawset (L, -3);
 
        luaL_register (L, NULL,  cdblib_m);
-       luaL_register (L, "cdb", cdblib_f);
-
        lua_pop (L, 1);                      /* remove metatable from stack */
 
-       return 1;
+       rspamd_lua_add_preload (L, "rspamd_cdb", lua_load_cdb);
 }
index 869bca8659c9dab46c2e516fa33b1e5c15c73249..1edca48576b1a09dc78946296a88e1deb45f3778 100644 (file)
@@ -428,25 +428,17 @@ lua_check_statfile (lua_State * L)
 
 /* Open functions */
 
-gint
+void
 luaopen_classifier (lua_State * L)
 {
        rspamd_lua_new_class (L, "rspamd{classifier}", classifierlib_m);
-       luaL_register (L, "rspamd_classifier", null_reg);
-
        lua_pop (L, 1);                      /* remove metatable from stack */
-
-       return 1;
 }
 
-gint
+void
 luaopen_statfile (lua_State * L)
 {
        rspamd_lua_new_class (L, "rspamd{statfile}", statfilelib_m);
-       luaL_register (L, "rspamd_statfile", null_reg);
-
        lua_pop (L, 1);                      /* remove metatable from stack */
-
-       return 1;
 }
 
index 0d68a364e339cd8dd60a38f5e18bbb1a90e5ff15..17b284e0c509648399c25a0526e3acb7429bffe5 100644 (file)
@@ -249,24 +249,19 @@ lua_logger_debug (lua_State * L)
 
 /*** Init functions ***/
 
-gint
-luaopen_rspamd (lua_State * L)
+static gint
+lua_load_logger (lua_State *L)
 {
-       luaL_register (L, "rspamd", null_reg);
-       /* make version string available to scripts */
-       lua_pushstring (L, "_VERSION");
-       lua_pushstring (L, RVERSION);
-       lua_rawset (L, -3);
+       lua_newtable (L);
+       luaL_register (L, NULL, loggerlib_f);
 
        return 1;
 }
 
-static gint
+static void
 luaopen_logger (lua_State * L)
 {
-
-       luaL_register (L, "rspamd_logger", loggerlib_f);
-       return 1;
+       rspamd_lua_add_preload (L, "rspamd_logger", lua_load_logger);
 }
 
 
@@ -294,34 +289,34 @@ rspamd_lua_init (struct rspamd_config *cfg)
        L = luaL_newstate ();
        luaL_openlibs (L);
 
-       (void)luaopen_rspamd (L);
-       (void)luaopen_logger (L);
-       (void)luaopen_mempool (L);
-       (void)luaopen_config (L);
-       (void)luaopen_radix (L);
-       (void)luaopen_hash_table (L);
-       (void)luaopen_trie (L);
-       (void)luaopen_task (L);
-       (void)luaopen_textpart (L);
-       (void)luaopen_mimepart (L);
-       (void)luaopen_image (L);
-       (void)luaopen_url (L);
-       (void)luaopen_message (L);
-       (void)luaopen_classifier (L);
-       (void)luaopen_statfile (L);
-       (void)luaopen_glib_regexp (L);
-       (void)luaopen_cdb (L);
-       (void)luaopen_xmlrpc (L);
-       (void)luaopen_http (L);
-       (void)luaopen_redis (L);
-       (void)luaopen_upstream (L);
-       (void)lua_add_actions_global (L);
-       (void)luaopen_session (L);
-       (void)luaopen_io_dispatcher (L);
-       (void)luaopen_dns_resolver (L);
-       (void)luaopen_rsa (L);
-       (void)luaopen_ip (L);
-       (void)luaopen_ucl (L);
+       luaopen_logger (L);
+       luaopen_mempool (L);
+       luaopen_config (L);
+       luaopen_radix (L);
+       luaopen_hash_table (L);
+       luaopen_trie (L);
+       luaopen_task (L);
+       luaopen_textpart (L);
+       luaopen_mimepart (L);
+       luaopen_image (L);
+       luaopen_url (L);
+       luaopen_message (L);
+       luaopen_classifier (L);
+       luaopen_statfile (L);
+       luaopen_glib_regexp (L);
+       luaopen_cdb (L);
+       luaopen_xmlrpc (L);
+       luaopen_http (L);
+       luaopen_redis (L);
+       luaopen_upstream (L);
+       lua_add_actions_global (L);
+       luaopen_session (L);
+       luaopen_io_dispatcher (L);
+       luaopen_dns_resolver (L);
+       luaopen_rsa (L);
+       luaopen_ip (L);
+
+       rspamd_lua_add_preload (L, "ucl", luaopen_ucl);
 
        return L;
 }
@@ -702,3 +697,15 @@ rspamd_lua_typerror (lua_State *L, int narg, const char *tname)
                        luaL_typename (L, narg));
        return luaL_argerror (L, narg, msg);
 }
+
+
+void
+rspamd_lua_add_preload (lua_State *L, const gchar *name, lua_CFunction func)
+{
+       lua_getglobal (L, "package");
+       lua_pushstring (L, "preload");
+       lua_gettable (L, -2);
+       lua_pushcfunction (L, func);
+       lua_setfield (L, -2, name);
+       lua_pop (L, 1);
+}
index 78bf80fdb9e499031ff4b656ac56180c0be5df2b..6594cdc2b565435c761ec66ddce3e0ecfedab408 100644 (file)
@@ -143,31 +143,37 @@ struct rspamd_lua_ip {
 /**
  * Open libraries functions
  */
-gint luaopen_message (lua_State *L);
-gint luaopen_task (lua_State *L);
-gint luaopen_config (lua_State *L);
-gint luaopen_metric (lua_State *L);
-gint luaopen_radix (lua_State *L);
-gint luaopen_hash_table (lua_State *L);
-gint luaopen_trie (lua_State * L);
-gint luaopen_textpart (lua_State *L);
-gint luaopen_mimepart (lua_State *L);
-gint luaopen_image (lua_State *L);
-gint luaopen_url (lua_State *L);
-gint luaopen_classifier (lua_State *L);
-gint luaopen_statfile (lua_State * L);
-gint luaopen_glib_regexp (lua_State *L);
-gint luaopen_cdb (lua_State *L);
-gint luaopen_xmlrpc (lua_State * L);
-gint luaopen_http (lua_State * L);
-gint luaopen_redis (lua_State * L);
-gint luaopen_upstream (lua_State * L);
-gint luaopen_mempool (lua_State * L);
-gint luaopen_session (lua_State * L);
-gint luaopen_io_dispatcher (lua_State * L);
-gint luaopen_dns_resolver (lua_State * L);
-gint luaopen_rsa (lua_State * L);
-gint luaopen_ip (lua_State * L);
+
+/**
+ * Add preload function
+ */
+void rspamd_lua_add_preload (lua_State *L, const gchar *name, lua_CFunction func);
+
+void luaopen_message (lua_State *L);
+void luaopen_task (lua_State *L);
+void luaopen_config (lua_State *L);
+void luaopen_metric (lua_State *L);
+void luaopen_radix (lua_State *L);
+void luaopen_hash_table (lua_State *L);
+void luaopen_trie (lua_State * L);
+void luaopen_textpart (lua_State *L);
+void luaopen_mimepart (lua_State *L);
+void luaopen_image (lua_State *L);
+void luaopen_url (lua_State *L);
+void luaopen_classifier (lua_State *L);
+void luaopen_statfile (lua_State * L);
+void luaopen_glib_regexp (lua_State *L);
+void luaopen_cdb (lua_State *L);
+void luaopen_xmlrpc (lua_State * L);
+void luaopen_http (lua_State * L);
+void luaopen_redis (lua_State * L);
+void luaopen_upstream (lua_State * L);
+void luaopen_mempool (lua_State * L);
+void luaopen_session (lua_State * L);
+void luaopen_io_dispatcher (lua_State * L);
+void luaopen_dns_resolver (lua_State * L);
+void luaopen_rsa (lua_State * L);
+void luaopen_ip (lua_State * L);
 
 gint rspamd_lua_call_filter (const gchar *function, struct rspamd_task *task);
 gint rspamd_lua_call_chain_filter (const gchar *function,
index 777ed33fdd0df0057f1481dcde31f4761599c86b..d0bc53d99a5a7368f07f4bc541f03675d5ba1c7b 100644 (file)
@@ -1234,40 +1234,41 @@ lua_trie_search_task (lua_State *L)
 }
 /* Init functions */
 
-gint
+void
 luaopen_config (lua_State * L)
 {
        rspamd_lua_new_class (L, "rspamd{config}", configlib_m);
-       luaL_register (L, "rspamd_config", null_reg);
 
        lua_pop (L, 1);                      /* remove metatable from stack */
-
-       return 1;
 }
 
-gint
+void
 luaopen_radix (lua_State * L)
 {
        rspamd_lua_new_class (L, "rspamd{radix}", radixlib_m);
-       luaL_register (L, "rspamd_radix", null_reg);
 
        lua_pop (L, 1);                      /* remove metatable from stack */
-
-       return 1;
 }
 
-gint
+void
 luaopen_hash_table (lua_State * L)
 {
        rspamd_lua_new_class (L, "rspamd{hash_table}", hashlib_m);
        luaL_register (L, "rspamd_hash_table", null_reg);
 
        lua_pop (L, 1);                      /* remove metatable from stack */
+}
+
+static gint
+lua_load_trie (lua_State *L)
+{
+       lua_newtable (L);
+       luaL_register (L, NULL, trielib_f);
 
        return 1;
 }
 
-gint
+void
 luaopen_trie (lua_State * L)
 {
        luaL_newmetatable (L, "rspamd{trie}");
@@ -1280,9 +1281,7 @@ luaopen_trie (lua_State * L)
        lua_rawset (L, -3);
 
        luaL_register (L, NULL,                  trielib_m);
-       luaL_register (L, "rspamd_trie", trielib_f);
+       rspamd_lua_add_preload (L, "rspamd_trie", lua_load_trie);
 
        lua_pop (L, 1);                      /* remove metatable from stack */
-
-       return 1;
 }
index bd130694713f8942c9d00676bd6e46103141de06..17620a2892a547fc1fb682c2d69bf996523139e6 100644 (file)
@@ -27,7 +27,7 @@
 
 /* Public prototypes */
 struct rspamd_dns_resolver * lua_check_dns_resolver (lua_State * L);
-gint luaopen_dns_resolver (lua_State * L);
+void luaopen_dns_resolver (lua_State * L);
 
 /* Lua bindings */
 LUA_FUNCTION_DEF (dns_resolver, init);
@@ -356,7 +356,16 @@ lua_dns_resolver_resolve (lua_State *L)
        return 1;
 }
 
-gint
+static gint
+lua_load_dns (lua_State * L)
+{
+       lua_newtable (L);
+       luaL_register (L, NULL, dns_resolverlib_f);
+
+       return 1;
+}
+
+void
 luaopen_dns_resolver (lua_State * L)
 {
 
@@ -379,9 +388,8 @@ luaopen_dns_resolver (lua_State * L)
                LUA_ENUM (L, RDNS_REQUEST_AAA, RDNS_REQUEST_SRV);
        }
 
-       luaL_register (L, NULL,                          dns_resolverlib_m);
-       luaL_register (L, "rspamd_resolver", dns_resolverlib_f);
+       luaL_register (L, NULL, dns_resolverlib_m);
+       rspamd_lua_add_preload (L, "rspamd_resolver", lua_load_dns);
 
        lua_pop (L, 1);                      /* remove metatable from stack */
-       return 1;
 }
index d1a4434c2ae13a7498830d8ee6fb39a7a28a102b..8803df80c333967b72e6830a766153c2a1e6f888 100644 (file)
@@ -355,11 +355,17 @@ lua_http_request (lua_State *L)
        return 1;
 }
 
-gint
-luaopen_http (lua_State * L)
+static gint
+lua_load_http (lua_State * L)
 {
-
-       luaL_register (L, "rspamd_http", httplib_m);
+       lua_newtable (L);
+       luaL_register (L, NULL, httplib_m);
 
        return 1;
 }
+
+void
+luaopen_http (lua_State * L)
+{
+       rspamd_lua_add_preload (L, "rspamd_http", lua_load_http);
+}
index fba1cd1cb24dcd74fd2d63bfa8d967be4333b239..a2ce26130ca7ea7d3f6857e9c49d34fe2b413ae6 100644 (file)
@@ -460,7 +460,16 @@ rspamd_lua_ip_push_fromstring (lua_State *L, const gchar *ip_str)
        }
 }
 
-gint
+static gint
+lua_load_ip (lua_State * L)
+{
+       lua_newtable (L);
+       luaL_register (L, NULL, iplib_f);
+
+       return 1;
+}
+
+void
 luaopen_ip (lua_State * L)
 {
        luaL_newmetatable (L, "rspamd{ip}");
@@ -473,9 +482,7 @@ luaopen_ip (lua_State * L)
        lua_rawset (L, -3);
 
        luaL_register (L, NULL,            iplib_m);
-       luaL_register (L, "rspamd_ip", iplib_f);
+       rspamd_lua_add_preload (L, "rspamd_ip", lua_load_ip);
 
        lua_pop (L, 1);                      /* remove metatable from stack */
-
-       return 1;
 }
index 465378af9203b41b698c42cf590f2012dac6fc50..049f8080e7d0b47a1454f76d632ad67693de4aaf 100644 (file)
@@ -26,7 +26,7 @@
 
 /* Public prototypes */
 struct memory_pool_s * rspamd_lua_check_mempool (lua_State * L);
-gint luaopen_mempool (lua_State * L);
+void luaopen_mempool (lua_State * L);
 
 /* Lua bindings */
 LUA_FUNCTION_DEF (mempool, create);
@@ -221,7 +221,16 @@ lua_mempool_memory_pool_get_variable (lua_State *L)
        return 1;
 }
 
-gint
+static gint
+lua_load_mempool (lua_State * L)
+{
+       lua_newtable (L);
+       luaL_register (L, NULL, mempoollib_f);
+
+       return 1;
+}
+
+void
 luaopen_mempool (lua_State * L)
 {
        luaL_newmetatable (L, "rspamd{mempool}");
@@ -234,9 +243,7 @@ luaopen_mempool (lua_State * L)
        lua_rawset (L, -3);
 
        luaL_register (L, NULL,                         mempoollib_m);
-       luaL_register (L, "rspamd_mempool", mempoollib_f);
+       rspamd_lua_add_preload (L, "rspamd_mempool", lua_load_mempool);
 
        lua_pop (L, 1);                      /* remove metatable from stack */
-
-       return 1;
 }
index d5a235d2a04ba40b107d962a2527c664df8463e3..f40d6465718a724abf5c62c54030e42d284e1710 100644 (file)
@@ -200,13 +200,9 @@ lua_message_get_date (lua_State * L)
        return 1;
 }
 
-gint
+void
 luaopen_message (lua_State * L)
 {
        rspamd_lua_new_class (L, "rspamd{message}", msglib_m);
-       luaL_register (L, "rspamd_message", null_reg);
-
        lua_pop (L, 1);                      /* remove metatable from stack */
-
-       return 1;
 }
index bc4ba594b443dd18918b82e5b7c3f6f1688722bb..67c86586e7ff0a6eb4e8bfb8d4c13ba3fdbacfe2 100644 (file)
@@ -366,16 +366,21 @@ lua_redis_make_request (lua_State *L)
        return 1;
 }
 
+static gint
+lua_load_redis (lua_State * L)
+{
+       lua_newtable (L);
+       luaL_register (L, NULL, redislib_m);
+
+       return 1;
+}
 /**
  * Open redis library
  * @param L lua stack
  * @return
  */
-gint
+void
 luaopen_redis (lua_State * L)
 {
-
-       luaL_register (L, "rspamd_redis", redislib_m);
-
-       return 1;
+       rspamd_lua_add_preload (L, "rspamd_redis", lua_load_redis);
 }
index 41703bc04d453443c2c2daf61ebac2f1b78c3f59..4e893d81da06cbd5badc44a6db2832ebfa98f4f9 100644 (file)
@@ -274,7 +274,16 @@ lua_regexp_destroy (lua_State *L)
        return 0;
 }
 
-gint
+static gint
+lua_load_regexp (lua_State * L)
+{
+       lua_newtable (L);
+       luaL_register (L, NULL, regexplib_f);
+
+       return 1;
+}
+
+void
 luaopen_glib_regexp (lua_State * L)
 {
        luaL_newmetatable (L, "rspamd{regexp}");
@@ -286,10 +295,8 @@ luaopen_glib_regexp (lua_State * L)
        lua_pushstring (L, "rspamd{regexp}");
        lua_rawset (L, -3);
 
-       luaL_register (L, NULL,         regexplib_m);
-       luaL_register (L, "regexp", regexplib_f);
+       luaL_register (L, NULL, regexplib_m);
+       rspamd_lua_add_preload (L, "regexp", lua_load_regexp);
 
        regexp_static_pool = rspamd_mempool_new (rspamd_mempool_suggest_size ());
-
-       return 1;
 }
index c06b14f3fef8b3665173d5ee6b7b2de38841f5b6..e4dee90b0f5283384dfaca9c2fb1f84d4cd0ae82 100644 (file)
@@ -641,7 +641,43 @@ lua_rsa_sign_file (lua_State *L)
        return 1;
 }
 
-gint
+static gint
+lua_load_pubkey (lua_State * L)
+{
+       lua_newtable (L);
+       luaL_register (L, NULL, rsapubkeylib_f);
+
+       return 1;
+}
+
+static gint
+lua_load_privkey (lua_State * L)
+{
+       lua_newtable (L);
+       luaL_register (L, NULL, rsaprivkeylib_f);
+
+       return 1;
+}
+
+static gint
+lua_load_signature (lua_State * L)
+{
+       lua_newtable (L);
+       luaL_register (L, NULL, rsasignlib_f);
+
+       return 1;
+}
+
+static gint
+lua_load_rsa (lua_State * L)
+{
+       lua_newtable (L);
+       luaL_register (L, NULL, rsalib_f);
+
+       return 1;
+}
+
+void
 luaopen_rsa (lua_State * L)
 {
        luaL_newmetatable (L, "rspamd{rsa_pubkey}");
@@ -653,8 +689,8 @@ luaopen_rsa (lua_State * L)
        lua_pushstring (L, "rspamd{rsa_pubkey}");
        lua_rawset (L, -3);
 
-       luaL_register (L, NULL,                 rsapubkeylib_m);
-       luaL_register (L, "rsa_pubkey", rsapubkeylib_f);
+       luaL_register (L, NULL, rsapubkeylib_m);
+       rspamd_lua_add_preload (L, "rspamd_rsa_pubkey", lua_load_pubkey);
 
        luaL_newmetatable (L, "rspamd{rsa_privkey}");
        lua_pushstring (L, "__index");
@@ -665,8 +701,8 @@ luaopen_rsa (lua_State * L)
        lua_pushstring (L, "rspamd{rsa_privkey}");
        lua_rawset (L, -3);
 
-       luaL_register (L, NULL,                  rsaprivkeylib_m);
-       luaL_register (L, "rsa_privkey", rsaprivkeylib_f);
+       luaL_register (L, NULL, rsaprivkeylib_m);
+       rspamd_lua_add_preload (L, "rspamd_rsa_privkey", lua_load_privkey);
 
        luaL_newmetatable (L, "rspamd{rsa_signature}");
        lua_pushstring (L, "__index");
@@ -677,22 +713,19 @@ luaopen_rsa (lua_State * L)
        lua_pushstring (L, "rspamd{rsa_signature}");
        lua_rawset (L, -3);
 
-       luaL_register (L, NULL,                    rsasignlib_m);
-       luaL_register (L, "rsa_signature", rsasignlib_f);
+       luaL_register (L, NULL, rsasignlib_m);
+       rspamd_lua_add_preload (L, "rspamd_rsa_signature", lua_load_signature);
 
-       luaL_register (L, "rsa",                           rsalib_f);
+       rspamd_lua_add_preload (L, "rspamd_rsa", lua_load_rsa);
 
-       return 1;
+       lua_settop (L, 0);
 }
 
 #else
-gint
+void
 luaopen_rsa (lua_State * L)
 {
        msg_info ("this rspamd version is not linked against openssl, therefore no "
                "RSA support is available");
-
-       return 1;
-
 }
 #endif
index 5abc3aa3611f0cb554ef24b60c6eb39893e60b4e..3fa636a5bc9c5f41d0992a3b6ce6f9733a1cd631 100644 (file)
@@ -25,7 +25,7 @@
 
 /* Public prototypes */
 struct rspamd_async_session * lua_check_session (lua_State * L);
-gint luaopen_session (lua_State * L);
+void luaopen_session (lua_State * L);
 
 /* Lua bindings */
 LUA_FUNCTION_DEF (session, register_async_event);
@@ -302,7 +302,16 @@ lua_session_check_session_pending (lua_State *L)
        return 1;
 }
 
-gint
+static gint
+lua_load_session (lua_State * L)
+{
+       lua_newtable (L);
+       luaL_register (L, NULL, sessionlib_f);
+
+       return 1;
+}
+
+void
 luaopen_session (lua_State * L)
 {
        luaL_newmetatable (L, "rspamd{session}");
@@ -315,15 +324,12 @@ luaopen_session (lua_State * L)
        lua_rawset (L, -3);
 
        luaL_register (L, NULL,                         sessionlib_m);
-       luaL_register (L, "rspamd_session", sessionlib_f);
+       rspamd_lua_add_preload (L, "rspamd_session", lua_load_session);
 
        lua_pop (L, 1);                      /* remove metatable from stack */
 
        /* Simple event class */
        rspamd_lua_new_class (L, "rspamd{event}", eventlib_m);
-       luaL_register (L, "rspamd_event", null_reg);
 
        lua_pop (L, 1);                      /* remove metatable from stack */
-
-       return 1;
 }
index c58aea556aa54c7b1a05ffbd8fb7f6c7b7e670de..82996a35710a35ee86e1468105c2dc26e4b7cbc0 100644 (file)
@@ -1868,57 +1868,52 @@ lua_url_get_phished (lua_State *L)
 }
 
 /* Init part */
-gint
-luaopen_task (lua_State * L)
+
+static gint
+lua_load_task (lua_State * L)
 {
-       rspamd_lua_new_class_full (L, "rspamd{task}", "rspamd_task", tasklib_m, tasklib_f);
+       lua_newtable (L);
+       luaL_register (L, NULL, tasklib_f);
 
+       return 1;
+}
+
+void
+luaopen_task (lua_State * L)
+{
+       rspamd_lua_new_class (L, "rspamd{task}", tasklib_m);
        lua_pop (L, 1);                      /* remove metatable from stack */
 
-       return 1;
+       rspamd_lua_add_preload (L, "rspamd_task", lua_load_task);
 }
 
-gint
+void
 luaopen_textpart (lua_State * L)
 {
        rspamd_lua_new_class (L, "rspamd{textpart}", textpartlib_m);
        luaL_register (L, "rspamd_textpart", null_reg);
 
        lua_pop (L, 1);                      /* remove metatable from stack */
-
-       return 1;
 }
 
-gint
+void
 luaopen_mimepart (lua_State * L)
 {
        rspamd_lua_new_class (L, "rspamd{mimepart}", mimepartlib_m);
-       luaL_register (L, "rspamd_mimepart", null_reg);
-
        lua_pop (L, 1);                      /* remove metatable from stack */
-
-       return 1;
 }
 
-gint
+void
 luaopen_image (lua_State * L)
 {
        rspamd_lua_new_class (L, "rspamd{image}", imagelib_m);
-       luaL_register (L, "rspamd_image", null_reg);
-
        lua_pop (L, 1);                      /* remove metatable from stack */
-
-       return 1;
 }
 
-gint
+void
 luaopen_url (lua_State * L)
 {
        rspamd_lua_new_class (L, "rspamd{url}", urllib_m);
-       luaL_register (L, "rspamd_url", null_reg);
-
        lua_pop (L, 1);                      /* remove metatable from stack */
-
-       return 1;
 }
 
index 546405126040b68fccb55542f225b98a5ecce000..09a3df516db8dc9543d2ec6911ae990d218ba859 100644 (file)
@@ -527,8 +527,25 @@ lua_upstream_list_get_upstream_master_slave (lua_State *L)
        return 1;
 }
 
+static gint
+lua_load_upstream (lua_State * L)
+{
+       lua_newtable (L);
+       luaL_register (L, NULL, upstream_f);
 
-gint
+       return 1;
+}
+
+static gint
+lua_load_upstream_list (lua_State * L)
+{
+       lua_newtable (L);
+       luaL_register (L, NULL, upstream_list_f);
+
+       return 1;
+}
+
+void
 luaopen_upstream (lua_State * L)
 {
        luaL_newmetatable (L, "rspamd{upstream_list}");
@@ -541,7 +558,7 @@ luaopen_upstream (lua_State * L)
        lua_rawset (L, -3);
 
        luaL_register (L, NULL,                    upstream_list_m);
-       luaL_register (L, "upstream_list", upstream_list_f);
+       rspamd_lua_add_preload (L, "upstream_list", lua_load_upstream_list);
 
        lua_pop (L, 1);                      /* remove metatable from stack */
 
@@ -555,9 +572,7 @@ luaopen_upstream (lua_State * L)
        lua_rawset (L, -3);
 
        luaL_register (L, NULL,           upstream_m);
-       luaL_register (L, "upstream", upstream_f);
+       rspamd_lua_add_preload (L, "upstream", lua_load_upstream);
 
        lua_pop (L, 1);                      /* remove metatable from stack */
-
-       return 1;
 }
index ebac5bc1880aa26565e3c63e47d08fc3c549e5f1..0d489fd1cd59edc10bbc9aef40be076ce1aedaca 100644 (file)
@@ -599,12 +599,18 @@ lua_xmlrpc_make_request (lua_State *L)
        return 1;
 }
 
-gint
-luaopen_xmlrpc (lua_State * L)
+static gint
+lua_load_xmlrpc (lua_State * L)
 {
-
-       luaL_register (L, "rspamd_xmlrpc", xmlrpclib_m);
+       lua_newtable (L);
+       luaL_register (L, NULL, xmlrpclib_m);
 
        return 1;
 }
 
+void
+luaopen_xmlrpc (lua_State * L)
+{
+       rspamd_lua_add_preload (L, "rspamd_xmlrpc", lua_load_xmlrpc);
+}
+