commit 2ad0276: [Minor] Pass variables from the environment to rspamd_env

Vsevolod Stakhov vsevolod at highsecure.ru
Wed Mar 27 14:21:03 UTC 2019


Author: Vsevolod Stakhov
Date: 2019-03-27 12:03:54 +0000
URL: https://github.com/rspamd/rspamd/commit/2ad0276a3189c61e673ea716dbd461ac6ee59f87

[Minor] Pass variables from the environment to rspamd_env

---
 src/libutil/str_util.h |  3 +++
 src/libutil/upstream.c | 13 +++++--------
 src/lua/lua_common.c   | 44 ++++++++++++++++++++++++++++++++++----------
 3 files changed, 42 insertions(+), 18 deletions(-)

diff --git a/src/libutil/str_util.h b/src/libutil/str_util.h
index 9145b97b4..91efdf187 100644
--- a/src/libutil/str_util.h
+++ b/src/libutil/str_util.h
@@ -502,4 +502,7 @@ const gchar* rspamd_string_len_strip (const gchar *in,
 								((uc) >= 0x205F && (uc) <= 0x206F) || \
 								(uc) == 0xFEFF)
 
+#define RSPAMD_LEN_CHECK_STARTS_WITH(s, len, lit) \
+	((len) >= sizeof(lit) - 1 && g_ascii_strncasecmp ((s), (lit), sizeof(lit) - 1) == 0)
+
 #endif /* SRC_LIBUTIL_STR_UTIL_H_ */
diff --git a/src/libutil/upstream.c b/src/libutil/upstream.c
index 3a2b803b4..3e04e68e9 100644
--- a/src/libutil/upstream.c
+++ b/src/libutil/upstream.c
@@ -788,8 +788,6 @@ rspamd_upstream_add_addr (struct upstream *up, rspamd_inet_addr_t *addr)
 	return TRUE;
 }
 
-#define LEN_CHECK_STARTS_WITH(s, len, lit) \
-	((len) >= sizeof(lit) - 1 && g_ascii_strncasecmp ((s), (lit), sizeof(lit) - 1) == 0)
 gboolean
 rspamd_upstreams_parse_line_len (struct upstream_list *ups,
 		const gchar *str, gsize len, guint16 def_port, void *data)
@@ -800,23 +798,23 @@ rspamd_upstreams_parse_line_len (struct upstream_list *ups,
 	guint span_len;
 	gboolean ret = FALSE;
 
-	if (LEN_CHECK_STARTS_WITH(p, len, "random:")) {
+	if (RSPAMD_LEN_CHECK_STARTS_WITH(p, len, "random:")) {
 		ups->rot_alg = RSPAMD_UPSTREAM_RANDOM;
 		p += sizeof ("random:") - 1;
 	}
-	else if (LEN_CHECK_STARTS_WITH(p, len, "master-slave:")) {
+	else if (RSPAMD_LEN_CHECK_STARTS_WITH(p, len, "master-slave:")) {
 		ups->rot_alg = RSPAMD_UPSTREAM_MASTER_SLAVE;
 		p += sizeof ("master-slave:") - 1;
 	}
-	else if (LEN_CHECK_STARTS_WITH(p, len, "round-robin:")) {
+	else if (RSPAMD_LEN_CHECK_STARTS_WITH(p, len, "round-robin:")) {
 		ups->rot_alg = RSPAMD_UPSTREAM_ROUND_ROBIN;
 		p += sizeof ("round-robin:") - 1;
 	}
-	else if (LEN_CHECK_STARTS_WITH(p, len, "hash:")) {
+	else if (RSPAMD_LEN_CHECK_STARTS_WITH(p, len, "hash:")) {
 		ups->rot_alg = RSPAMD_UPSTREAM_HASHED;
 		p += sizeof ("hash:") - 1;
 	}
-	else if (LEN_CHECK_STARTS_WITH(p, len, "sequential:")) {
+	else if (RSPAMD_LEN_CHECK_STARTS_WITH(p, len, "sequential:")) {
 		ups->rot_alg = RSPAMD_UPSTREAM_SEQUENTIAL;
 		p += sizeof ("sequential:") - 1;
 	}
@@ -847,7 +845,6 @@ rspamd_upstreams_parse_line_len (struct upstream_list *ups,
 	return ret;
 }
 
-#undef LEN_CHECK_STARTS_WITH
 
 gboolean
 rspamd_upstreams_parse_line (struct upstream_list *ups,
diff --git a/src/lua/lua_common.c b/src/lua/lua_common.c
index 7f49c090d..1c687fb48 100644
--- a/src/lua/lua_common.c
+++ b/src/lua/lua_common.c
@@ -541,6 +541,7 @@ void
 rspamd_lua_set_env (lua_State *L, GHashTable *vars)
 {
 	gint orig_top = lua_gettop (L);
+	gchar **env = g_get_environ ();
 
 	/* Set known paths as rspamd_paths global */
 	lua_getglobal (L, "rspamd_paths");
@@ -559,52 +560,52 @@ rspamd_lua_set_env (lua_State *L, GHashTable *vars)
 		const gchar *t;
 
 		/* Try environment */
-		t = getenv ("SHAREDIR");
+		t = g_environ_getenv (env, "SHAREDIR");
 		if (t) {
 			sharedir = t;
 		}
 
-		t = getenv ("PLUGINSDIR");
+		t = g_environ_getenv (env, "PLUGINSDIR");
 		if (t) {
 			pluginsdir = t;
 		}
 
-		t = getenv ("RULESDIR");
+		t = g_environ_getenv (env, "RULESDIR");
 		if (t) {
 			rulesdir = t;
 		}
 
-		t = getenv ("DBDIR");
+		t = g_environ_getenv (env, "DBDIR");
 		if (t) {
 			dbdir = t;
 		}
 
-		t = getenv ("RUNDIR");
+		t = g_environ_getenv (env, "RUNDIR");
 		if (t) {
 			rundir = t;
 		}
 
-		t = getenv ("LUALIBDIR");
+		t = g_environ_getenv (env, "LUALIBDIR");
 		if (t) {
 			lualibdir = t;
 		}
 
-		t = getenv ("LOGDIR");
+		t = g_environ_getenv (env, "LOGDIR");
 		if (t) {
 			logdir = t;
 		}
 
-		t = getenv ("WWWDIR");
+		t = g_environ_getenv (env, "WWWDIR");
 		if (t) {
 			wwwdir = t;
 		}
 
-		t = getenv ("CONFDIR");
+		t = g_environ_getenv (env, "CONFDIR");
 		if (t) {
 			confdir = t;
 		}
 
-		t = getenv ("LOCAL_CONFDIR");
+		t = g_environ_getenv (env, "LOCAL_CONFDIR");
 		if (t) {
 			local_confdir = t;
 		}
@@ -718,6 +719,29 @@ rspamd_lua_set_env (lua_State *L, GHashTable *vars)
 		lua_pushinteger (L, RSPAMD_VERSION_NUM);
 		lua_settable (L, -3);
 
+		if (env) {
+			gint lim = g_strv_length (env);
+
+			for (gint i = 0; i < lim; i++) {
+				if (RSPAMD_LEN_CHECK_STARTS_WITH(env[i], strlen (env[i]), "RSPAMD_")) {
+					const char *var = env[i] + sizeof ("RSPAMD_") - 1, *value;
+					gint varlen;
+
+					varlen = strcspn (var, "=");
+					value = var + varlen;
+
+					if (*value == '=') {
+						value ++;
+
+						lua_pushlstring (L, var, varlen);
+						lua_pushstring (L, value);
+						lua_settable (L, -3);
+					}
+
+				}
+			}
+		}
+
 		lua_setglobal (L, "rspamd_env");
 	}
 


More information about the Commits mailing list