]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Store raw urls
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 12 Aug 2017 17:04:13 +0000 (18:04 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 12 Aug 2017 19:26:17 +0000 (20:26 +0100)
src/libserver/url.c
src/libserver/url.h
src/libutil/http.c
src/lua/lua_http.c
src/lua/lua_url.c

index c7df932b829c03f7faa734c7fa50639cd50196eb..cc7c7acbf8e8a255e7f653c4bbce4b6d710b23de 100644 (file)
@@ -1592,7 +1592,10 @@ rspamd_url_parse (struct rspamd_url *uri, gchar *uristring, gsize len,
                uri->flags |= RSPAMD_URL_FLAG_OBSCURED;
        }
 
-       uri->string = p;
+       uri->raw = p;
+       uri->rawlen = len;
+       uri->string = rspamd_mempool_alloc (pool, len + 1);
+       rspamd_strlcpy (uri->string, p, len + 1);
        uri->urllen = len;
 
        /* Now decode url symbols */
index e4834d9bcfccf057c4e48f20a03418facf605080..48f5acc1295422b3066c483fcac65d866ffaeb1b 100644 (file)
@@ -25,6 +25,7 @@ struct rspamd_url_tag {
 };
 
 struct rspamd_url {
+       gchar *raw;
        gchar *string;
        gint protocol;
        guint port;
@@ -48,6 +49,7 @@ struct rspamd_url {
        guint surbllen;
        guint tldlen;
        guint urllen;
+       guint rawlen;
 
        enum rspamd_url_flags flags;
        guint count;
index 80eff63d393107605e8d099c265e2c323e343c47..7f69843ea8672468c49cfab685f7c3ee6d6cc8bb 100644 (file)
@@ -2385,6 +2385,7 @@ rspamd_http_message_from_url (const gchar *url)
 
        urllen = strlen (url);
        memset (&pu, 0, sizeof (pu));
+
        if (http_parser_parse_url (url, urllen, FALSE, &pu) != 0) {
                msg_warn ("cannot parse URL: %s", url);
                return NULL;
index a655b8ec03fc0858b7062c71f6de455ebb07e7f0..34a31bde88a101ecec96591b00258974df1288c6 100644 (file)
@@ -366,13 +366,16 @@ lua_http_request (lua_State *L)
        if (lua_gettop (L) >= 2) {
                /* url, callback and event_base format */
                url = luaL_checkstring (L, 1);
+
                if (url == NULL || lua_type (L, 2) != LUA_TFUNCTION) {
                        msg_err ("http request has bad params");
                        lua_pushboolean (L, FALSE);
                        return 1;
                }
+
                lua_pushvalue (L, 2);
                cbref = luaL_ref (L, LUA_REGISTRYINDEX);
+
                if (lua_gettop (L) >= 3 && rspamd_lua_check_udata_maybe (L, 3, "rspamd{ev_base}")) {
                        ev_base = *(struct event_base **)lua_touserdata (L, 3);
                }
index 15966bfa3ec6c5ba406f1890991d9af99b65ee1e..cbe9148a364cb36cee2fe5cd3e511273d290a674 100644 (file)
@@ -47,6 +47,7 @@ LUA_FUNCTION_DEF (url, get_path);
 LUA_FUNCTION_DEF (url, get_query);
 LUA_FUNCTION_DEF (url, get_fragment);
 LUA_FUNCTION_DEF (url, get_text);
+LUA_FUNCTION_DEF (url, get_raw);
 LUA_FUNCTION_DEF (url, get_tld);
 LUA_FUNCTION_DEF (url, to_table);
 LUA_FUNCTION_DEF (url, is_phished);
@@ -73,6 +74,7 @@ static const struct luaL_reg urllib_m[] = {
        LUA_INTERFACE_DEF (url, get_fragment),
        LUA_INTERFACE_DEF (url, get_text),
        LUA_INTERFACE_DEF (url, get_tld),
+       LUA_INTERFACE_DEF (url, get_raw),
        LUA_INTERFACE_DEF (url, to_table),
        LUA_INTERFACE_DEF (url, is_phished),
        LUA_INTERFACE_DEF (url, is_redirected),
@@ -262,6 +264,26 @@ lua_url_get_text (lua_State *L)
        return 1;
 }
 
+/***
+ * @method url:get_raw()
+ * Get full content of the url as it was parsed (e.g. with urldecode)
+ * @return {string} url string
+ */
+static gint
+lua_url_get_raw (lua_State *L)
+{
+       struct rspamd_lua_url *url = lua_check_url (L, 1);
+
+       if (url != NULL) {
+               lua_pushlstring (L, url->url->raw, url->url->rawlen);
+       }
+       else {
+               lua_pushnil (L);
+       }
+
+       return 1;
+}
+
 /***
  * @method url:is_phished()
  * Check whether URL is treated as phished