Bläddra i källkod

[Rework] Rework URL structure: user field

tags/2.5
Vsevolod Stakhov 4 år sedan
förälder
incheckning
f1d8615a32
5 ändrade filer med 28 tillägg och 21 borttagningar
  1. 2
    3
      src/libserver/protocol.c
  2. 1
    1
      src/libserver/re_cache.c
  3. 12
    11
      src/libserver/url.c
  4. 6
    2
      src/libserver/url.h
  5. 7
    4
      src/lua/lua_url.c

+ 2
- 3
src/libserver/protocol.c Visa fil

@@ -994,9 +994,8 @@ emails_protocol_cb (gpointer key, gpointer value, gpointer ud)
struct rspamd_url *url = value;
ucl_object_t *obj;

if (url->userlen > 0 && url->hostlen > 0 &&
url->host == url->user + url->userlen + 1) {
obj = ucl_object_fromlstring (url->user,
if (url->userlen > 0 && url->hostlen > 0) {
obj = ucl_object_fromlstring (rspamd_url_user_unsafe (url),
url->userlen + url->hostlen + 1);
ucl_array_append (cb->top, obj);
}

+ 1
- 1
src/libserver/re_cache.c Visa fil

@@ -1223,7 +1223,7 @@ rspamd_re_cache_exec_re (struct rspamd_task *task,
continue;
}

in = url->user;
in = rspamd_url_user_unsafe (url);
len = url->userlen + 1 + url->hostlen;
scvec[i] = (guchar *) in;
lenvec[i++] = len;

+ 12
- 11
src/libserver/url.c Visa fil

@@ -1874,7 +1874,7 @@ rspamd_url_shift (struct rspamd_url *uri, gsize nlen,
switch (field) {
case UF_SCHEMA:
if (uri->userlen > 0) {
uri->user -= shift;
uri->usershift -= shift;
}
if (uri->hostlen > 0) {
uri->host -= shift;
@@ -2038,7 +2038,7 @@ rspamd_url_parse (struct rspamd_url *uri,
uri->fragmentlen = complen;
break;
case UF_USERINFO:
uri->user = comp;
uri->usershift = u.field_data[i].off;
uri->userlen = complen;
break;
default:
@@ -3382,7 +3382,7 @@ rspamd_email_hash (gconstpointer u)
}

if (url->userlen > 0) {
rspamd_cryptobox_fast_hash_update (&st, url->user, url->userlen);
rspamd_cryptobox_fast_hash_update (&st, rspamd_url_user_unsafe(url), url->userlen);
}

return (guint)rspamd_cryptobox_fast_hash_final (&st);
@@ -3404,8 +3404,9 @@ rspamd_emails_cmp (gconstpointer a, gconstpointer b)
return FALSE;
}
else {
return rspamd_lc_cmp (u1->user, u2->user, u1->userlen) ==
0;
return (rspamd_lc_cmp (rspamd_url_user_unsafe(u1),
rspamd_url_user_unsafe(u2),
u1->userlen) == 0);
}
}
else {
@@ -3606,7 +3607,7 @@ static const unsigned char rspamd_url_encoding_classes[256] = {

#define CHECK_URL_COMPONENT(beg, len, flags) do { \
for (i = 0; i < (len); i ++) { \
if ((rspamd_url_encoding_classes[(beg)[i]] & (flags)) == 0) { \
if ((rspamd_url_encoding_classes[(guchar)(beg)[i]] & (flags)) == 0) { \
dlen += 2; \
} \
} \
@@ -3614,10 +3615,10 @@ static const unsigned char rspamd_url_encoding_classes[256] = {

#define ENCODE_URL_COMPONENT(beg, len, flags) do { \
for (i = 0; i < (len) && dend > d; i ++) { \
if ((rspamd_url_encoding_classes[(beg)[i]] & (flags)) == 0) { \
if ((rspamd_url_encoding_classes[(guchar)(beg)[i]] & (flags)) == 0) { \
*d++ = '%'; \
*d++ = hexdigests[((beg)[i] >> 4) & 0xf]; \
*d++ = hexdigests[(beg)[i] & 0xf]; \
*d++ = hexdigests[(guchar)((beg)[i] >> 4) & 0xf]; \
*d++ = hexdigests[(guchar)(beg)[i] & 0xf]; \
} \
else { \
*d++ = (beg)[i]; \
@@ -3638,7 +3639,7 @@ rspamd_url_encode (struct rspamd_url *url, gsize *pdlen,

CHECK_URL_COMPONENT ((guchar *)url->host, url->hostlen,
RSPAMD_URL_FLAGS_HOSTSAFE);
CHECK_URL_COMPONENT ((guchar *)url->user, url->userlen,
CHECK_URL_COMPONENT (rspamd_url_user_unsafe(url), url->userlen,
RSPAMD_URL_FLAGS_USERSAFE);
CHECK_URL_COMPONENT ((guchar *)url->data, url->datalen,
RSPAMD_URL_FLAGS_PATHSAFE);
@@ -3677,7 +3678,7 @@ rspamd_url_encode (struct rspamd_url *url, gsize *pdlen,
}

if (url->userlen > 0) {
ENCODE_URL_COMPONENT ((guchar *)url->user, url->userlen,
ENCODE_URL_COMPONENT (rspamd_url_user_unsafe (url), url->userlen,
RSPAMD_URL_FLAGS_USERSAFE);
*d++ = ':';
}

+ 6
- 2
src/libserver/url.h Visa fil

@@ -47,7 +47,9 @@ struct rspamd_url {
guint protocol;
guint port;

gchar *user;
guint usershift;
guint userlen;

gchar *host;
gchar *data;
gchar *query;
@@ -58,7 +60,6 @@ struct rspamd_url {
struct rspamd_url *phished_url;

guint protocollen;
guint userlen;
guint hostlen;
guint datalen;
guint querylen;
@@ -71,6 +72,9 @@ struct rspamd_url {
guint count;
};

#define rspamd_url_user(u) ((u)->userlen > 0 ? (u)->string + (u)->usershift : NULL)
#define rspamd_url_user_unsafe(u) ((u)->string + (u)->usershift)

enum uri_errno {
URI_ERRNO_OK = 0, /* Parsing went well */
URI_ERRNO_EMPTY, /* The URI string was empty */

+ 7
- 4
src/lua/lua_url.c Visa fil

@@ -198,8 +198,8 @@ lua_url_get_user (lua_State *L)
LUA_TRACE_POINT;
struct rspamd_lua_url *url = lua_check_url (L, 1);

if (url != NULL && url->url->user != NULL) {
lua_pushlstring (L, url->url->user, url->url->userlen);
if (url != NULL && rspamd_url_user (url->url) != NULL) {
lua_pushlstring (L, rspamd_url_user (url->url), url->url->userlen);
}
else {
lua_pushnil (L);
@@ -307,7 +307,10 @@ lua_url_tostring (lua_State *L)
if (url->url->protocol == PROTOCOL_MAILTO) {
gchar *tmp = g_malloc (url->url->userlen + 1 +
url->url->hostlen);
memcpy (tmp, url->url->user, url->url->userlen);
if (url->url->userlen) {
memcpy (tmp, url->url->string + url->url->usershift, url->url->userlen);
}

tmp[url->url->userlen] = '@';
memcpy (tmp + url->url->userlen + 1, url->url->host,
url->url->hostlen);
@@ -675,7 +678,7 @@ lua_url_to_table (lua_State *L)

if (u->userlen > 0) {
lua_pushstring (L, "user");
lua_pushlstring (L, u->user, u->userlen);
lua_pushlstring (L, rspamd_url_user (u), u->userlen);
lua_settable (L, -3);
}


Laddar…
Avbryt
Spara