aboutsummaryrefslogtreecommitdiffstats
path: root/src/libserver
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2018-06-16 15:04:41 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2018-06-16 15:04:41 +0100
commitb9902dde2b8241cc52cb59e9ea99374cad6c071c (patch)
tree4879fa4e4397cc45a1fc5fca4666431980111b8a /src/libserver
parent8bdc6fa55d56eb01cd70b11f783db60319209b11 (diff)
downloadrspamd-b9902dde2b8241cc52cb59e9ea99374cad6c071c.tar.gz
rspamd-b9902dde2b8241cc52cb59e9ea99374cad6c071c.zip
[Minor] Allow to reinit URLs library
Diffstat (limited to 'src/libserver')
-rw-r--r--src/libserver/cfg_utils.c8
-rw-r--r--src/libserver/url.c66
-rw-r--r--src/libserver/url.h2
3 files changed, 49 insertions, 27 deletions
diff --git a/src/libserver/cfg_utils.c b/src/libserver/cfg_utils.c
index 6083d655f..284a40672 100644
--- a/src/libserver/cfg_utils.c
+++ b/src/libserver/cfg_utils.c
@@ -653,6 +653,11 @@ rspamd_config_parse_log_format (struct rspamd_config *cfg)
return TRUE;
}
+static void
+rspamd_urls_config_dtor (gpointer _unused)
+{
+ rspamd_url_deinit ();
+}
/*
* Perform post load actions
@@ -751,6 +756,9 @@ rspamd_config_post_load (struct rspamd_config *cfg,
else {
rspamd_url_init (cfg->tld_file);
}
+
+ rspamd_mempool_add_destructor (cfg->cfg_pool, rspamd_urls_config_dtor,
+ NULL);
}
init_dynamic_config (cfg);
diff --git a/src/libserver/url.c b/src/libserver/url.c
index 650f86a28..019a4ff36 100644
--- a/src/libserver/url.c
+++ b/src/libserver/url.c
@@ -475,42 +475,56 @@ rspamd_url_add_static_matchers (struct url_match_scanner *sc)
}
void
+rspamd_url_deinit (void)
+{
+ if (url_scanner != NULL) {
+ rspamd_multipattern_destroy (url_scanner->search_trie);
+ g_array_free (url_scanner->matchers, TRUE);
+ g_free (url_scanner);
+
+ url_scanner = NULL;
+ }
+}
+
+void
rspamd_url_init (const gchar *tld_file)
{
GError *err = NULL;
- if (url_scanner == NULL) {
- url_scanner = g_malloc (sizeof (struct url_match_scanner));
+ if (url_scanner != NULL) {
+ rspamd_url_deinit ();
+ }
- if (tld_file) {
- /* Reserve larger multipattern */
- url_scanner->matchers = g_array_sized_new (FALSE, TRUE,
- sizeof (struct url_matcher), 13000);
- url_scanner->search_trie = rspamd_multipattern_create_sized (13000,
- RSPAMD_MULTIPATTERN_TLD | RSPAMD_MULTIPATTERN_ICASE);
- }
- else {
- url_scanner->matchers = g_array_sized_new (FALSE, TRUE,
- sizeof (struct url_matcher), 128);
- url_scanner->search_trie = rspamd_multipattern_create_sized (128,
- RSPAMD_MULTIPATTERN_TLD | RSPAMD_MULTIPATTERN_ICASE);
- }
+ url_scanner = g_malloc (sizeof (struct url_match_scanner));
- rspamd_url_add_static_matchers (url_scanner);
+ if (tld_file) {
+ /* Reserve larger multipattern */
+ url_scanner->matchers = g_array_sized_new (FALSE, TRUE,
+ sizeof (struct url_matcher), 13000);
+ url_scanner->search_trie = rspamd_multipattern_create_sized (13000,
+ RSPAMD_MULTIPATTERN_TLD | RSPAMD_MULTIPATTERN_ICASE);
+ }
+ else {
+ url_scanner->matchers = g_array_sized_new (FALSE, TRUE,
+ sizeof (struct url_matcher), 128);
+ url_scanner->search_trie = rspamd_multipattern_create_sized (128,
+ RSPAMD_MULTIPATTERN_TLD | RSPAMD_MULTIPATTERN_ICASE);
+ }
- if (tld_file != NULL) {
- rspamd_url_parse_tld_file (tld_file, url_scanner);
- }
+ rspamd_url_add_static_matchers (url_scanner);
- if (!rspamd_multipattern_compile (url_scanner->search_trie, &err)) {
- msg_err ("cannot compile tld patterns, url matching will be "
- "broken completely: %e", err);
- g_error_free (err);
- }
+ if (tld_file != NULL) {
+ rspamd_url_parse_tld_file (tld_file, url_scanner);
+ }
- msg_debug ("initialized trie of %ud elements",
- url_scanner->matchers->len);
+ if (!rspamd_multipattern_compile (url_scanner->search_trie, &err)) {
+ msg_err ("cannot compile tld patterns, url matching will be "
+ "broken completely: %e", err);
+ g_error_free (err);
}
+
+ msg_debug ("initialized trie of %ud elements",
+ url_scanner->matchers->len);
}
#define SET_U(u, field) do { \
diff --git a/src/libserver/url.h b/src/libserver/url.h
index 0eac98060..b0cc10239 100644
--- a/src/libserver/url.h
+++ b/src/libserver/url.h
@@ -91,7 +91,7 @@ enum rspamd_url_protocol {
* @param cfg
*/
void rspamd_url_init (const gchar *tld_file);
-
+void rspamd_url_deinit (void);
/*
* Parse urls inside text
* @param pool memory pool