@@ -231,7 +231,7 @@ rspamd_encrypted_password_get_str (const gchar * password, gsize skip, | |||
return str; | |||
} | |||
static gboolean rspamd_check_encrypted_password (const gchar * password, | |||
static gboolean rspamd_check_encrypted_password (const GString * password, | |||
const gchar * check, const struct rspamd_controller_pbkdf *pbkdf) | |||
{ | |||
const gchar *salt, *hash; | |||
@@ -268,7 +268,7 @@ static gboolean rspamd_check_encrypted_password (const gchar * password, | |||
} | |||
local_key = g_alloca (pbkdf->key_len); | |||
rspamd_cryptobox_pbkdf (password, strlen (password), | |||
rspamd_cryptobox_pbkdf (password->str, password->len, | |||
salt_decoded, salt_len, | |||
local_key, pbkdf->key_len, pbkdf->rounds); | |||
@@ -290,7 +290,8 @@ static gboolean rspamd_controller_check_password( | |||
struct rspamd_controller_session *session, | |||
struct rspamd_http_message *msg, gboolean is_enable) | |||
{ | |||
const gchar *password, *check; | |||
const gchar *check; | |||
const GString *password; | |||
struct rspamd_controller_worker_ctx *ctx = session->ctx; | |||
gboolean check_normal = TRUE, check_enable = TRUE, ret = TRUE; | |||
const struct rspamd_controller_pbkdf *pbkdf = NULL; | |||
@@ -338,7 +339,7 @@ static gboolean rspamd_controller_check_password( | |||
} | |||
if (check != NULL) { | |||
if (!rspamd_is_encrypted_password (check, &pbkdf)) { | |||
ret = rspamd_constant_memcmp (password, check, 0); | |||
ret = rspamd_constant_memcmp (password->str, check, password->len); | |||
} | |||
else { | |||
ret = rspamd_check_encrypted_password (password, check, | |||
@@ -360,7 +361,8 @@ static gboolean rspamd_controller_check_password( | |||
if (ctx->password != NULL) { | |||
check = ctx->password; | |||
if (!rspamd_is_encrypted_password (check, &pbkdf)) { | |||
check_normal = rspamd_constant_memcmp (password, check, 0); | |||
check_normal = rspamd_constant_memcmp (password->str, check, | |||
password->len); | |||
} | |||
else { | |||
check_normal = rspamd_check_encrypted_password (password, | |||
@@ -374,7 +376,8 @@ static gboolean rspamd_controller_check_password( | |||
if (ctx->enable_password != NULL) { | |||
check = ctx->enable_password; | |||
if (!rspamd_is_encrypted_password (check, &pbkdf)) { | |||
check_enable = rspamd_constant_memcmp (password, check, 0); | |||
check_enable = rspamd_constant_memcmp (password->str, check, | |||
password->len); | |||
} | |||
else { | |||
check_enable = rspamd_check_encrypted_password (password, | |||
@@ -655,7 +658,7 @@ rspamd_controller_handle_get_map (struct rspamd_http_connection_entry *conn_ent, | |||
struct rspamd_controller_session *session = conn_ent->ud; | |||
GList *cur; | |||
struct rspamd_map *map; | |||
const gchar *idstr; | |||
const GString *idstr; | |||
gchar *errstr; | |||
struct stat st; | |||
gint fd; | |||
@@ -676,8 +679,8 @@ rspamd_controller_handle_get_map (struct rspamd_http_connection_entry *conn_ent, | |||
return 0; | |||
} | |||
id = strtoul (idstr, &errstr, 10); | |||
if (*errstr != '\0') { | |||
id = strtoul (idstr->str, &errstr, 10); | |||
if (*errstr != '\0' && *errstr != '\n') { | |||
msg_info ("invalid map id"); | |||
rspamd_controller_send_error (conn_ent, 400, "400 invalid map id"); | |||
return 0; | |||
@@ -961,7 +964,6 @@ rspamd_controller_handle_learn_common ( | |||
struct rspamd_controller_worker_ctx *ctx; | |||
struct rspamd_classifier_config *cl; | |||
struct rspamd_task *task; | |||
const gchar *classifier; | |||
ctx = session->ctx; | |||
@@ -977,12 +979,8 @@ rspamd_controller_handle_learn_common ( | |||
return 0; | |||
} | |||
if ((classifier = | |||
rspamd_http_message_find_header (msg, "Classifier")) == NULL) { | |||
classifier = "bayes"; | |||
} | |||
cl = rspamd_config_find_classifier (ctx->cfg, classifier); | |||
/* XXX: now work with only bayes */ | |||
cl = rspamd_config_find_classifier (ctx->cfg, "bayes"); | |||
if (cl == NULL) { | |||
rspamd_controller_send_error (conn_ent, 400, "Classifier not found"); | |||
return 0; | |||
@@ -1343,7 +1341,7 @@ rspamd_controller_handle_savemap (struct rspamd_http_connection_entry *conn_ent, | |||
GList *cur; | |||
struct rspamd_map *map; | |||
struct rspamd_controller_worker_ctx *ctx; | |||
const gchar *idstr; | |||
const GString *idstr; | |||
gchar *errstr; | |||
guint32 id; | |||
gboolean found = FALSE; | |||
@@ -1371,8 +1369,8 @@ rspamd_controller_handle_savemap (struct rspamd_http_connection_entry *conn_ent, | |||
return 0; | |||
} | |||
id = strtoul (idstr, &errstr, 10); | |||
if (*errstr != '\0') { | |||
id = strtoul (idstr->str, &errstr, 10); | |||
if (*errstr != '\0' && *errstr != '\r') { | |||
msg_info ("invalid map id"); | |||
rspamd_controller_send_error (conn_ent, 400, "Map id is invalid"); | |||
return 0; |
@@ -294,7 +294,8 @@ proxy_client_finish_handler (struct rspamd_http_connection *conn, | |||
{ | |||
struct http_proxy_session *session = conn->ud; | |||
struct rspamd_http_upstream *backend = NULL; | |||
const gchar *host; | |||
const GString *host; | |||
gchar hostbuf[512]; | |||
if (!session->replied) { | |||
host = rspamd_http_message_find_header (msg, "Host"); | |||
@@ -303,7 +304,8 @@ proxy_client_finish_handler (struct rspamd_http_connection *conn, | |||
backend = session->ctx->default_upstream; | |||
} | |||
else { | |||
backend = g_hash_table_lookup (session->ctx->upstreams, host); | |||
rspamd_strlcpy (hostbuf, host->str, sizeof (hostbuf)); | |||
backend = g_hash_table_lookup (session->ctx->upstreams, hostbuf); | |||
if (backend == NULL) { | |||
backend = session->ctx->default_upstream; | |||
@@ -312,14 +314,14 @@ proxy_client_finish_handler (struct rspamd_http_connection *conn, | |||
if (backend == NULL) { | |||
/* No backend */ | |||
msg_err ("cannot find upstream for %s", host ? host : "default"); | |||
msg_err ("cannot find upstream for %s", host ? hostbuf : "default"); | |||
goto err; | |||
} | |||
else { | |||
session->up = rspamd_upstream_get (backend->u, RSPAMD_UPSTREAM_ROUND_ROBIN); | |||
if (session->up == NULL) { | |||
msg_err ("cannot select upstream for %s", host ? host : "default"); | |||
msg_err ("cannot select upstream for %s", host ? hostbuf : "default"); | |||
goto err; | |||
} | |||
@@ -327,7 +329,7 @@ proxy_client_finish_handler (struct rspamd_http_connection *conn, | |||
rspamd_upstream_addr (session->up), SOCK_STREAM, TRUE); | |||
if (session->backend_sock == -1) { | |||
msg_err ("cannot connect upstream for %s", host ? host : "default"); | |||
msg_err ("cannot connect upstream for %s", host ? hostbuf : "default"); | |||
rspamd_upstream_fail (session->up); | |||
goto err; | |||
} |
@@ -1740,12 +1740,12 @@ rspamd_http_message_add_header (struct rspamd_http_message *msg, | |||
} | |||
} | |||
const gchar * | |||
const GString * | |||
rspamd_http_message_find_header (struct rspamd_http_message *msg, | |||
const gchar *name) | |||
{ | |||
struct rspamd_http_header *hdr; | |||
const gchar *res = NULL; | |||
const GString *res = NULL; | |||
guint slen = strlen (name); | |||
if (msg != NULL) { | |||
@@ -1753,7 +1753,7 @@ rspamd_http_message_find_header (struct rspamd_http_message *msg, | |||
{ | |||
if (hdr->name->len == slen) { | |||
if (g_ascii_strncasecmp (hdr->name->str, name, slen) == 0) { | |||
res = hdr->value->str; | |||
res = hdr->value; | |||
break; | |||
} | |||
} |
@@ -325,7 +325,7 @@ void rspamd_http_message_add_header (struct rspamd_http_message *msg, | |||
* @param msg message | |||
* @param name name of header | |||
*/ | |||
const gchar * rspamd_http_message_find_header (struct rspamd_http_message *msg, | |||
const GString * rspamd_http_message_find_header (struct rspamd_http_message *msg, | |||
const gchar *name); | |||
/** |
@@ -1292,7 +1292,7 @@ static gboolean | |||
fuzzy_controller_handler (struct rspamd_http_connection_entry *conn_ent, | |||
struct rspamd_http_message *msg, struct module_ctx *ctx, gint cmd) | |||
{ | |||
const gchar *arg; | |||
const GString *arg; | |||
gchar *err_str; | |||
gint value = 1, flag = 0; | |||
@@ -1300,18 +1300,18 @@ fuzzy_controller_handler (struct rspamd_http_connection_entry *conn_ent, | |||
arg = rspamd_http_message_find_header (msg, "Weight"); | |||
if (arg) { | |||
errno = 0; | |||
value = strtol (arg, &err_str, 10); | |||
if (errno != 0 || *err_str != '\0') { | |||
msg_info ("error converting numeric argument %s", arg); | |||
value = strtol (arg->str, &err_str, 10); | |||
if (*err_str != '\0' && *err_str != '\r') { | |||
msg_info ("error converting numeric argument %v", arg); | |||
value = 0; | |||
} | |||
} | |||
arg = rspamd_http_message_find_header (msg, "Flag"); | |||
if (arg) { | |||
errno = 0; | |||
flag = strtol (arg, &err_str, 10); | |||
if (errno != 0 || *err_str != '\0') { | |||
msg_info ("error converting numeric argument %s", arg); | |||
flag = strtol (arg->str, &err_str, 10); | |||
if (*err_str != '\0' && *err_str != '\r') { | |||
msg_info ("error converting numeric argument %v", arg); | |||
flag = 0; | |||
} | |||
} |
@@ -947,20 +947,21 @@ surbl_redirector_finish (struct rspamd_http_connection *conn, | |||
{ | |||
struct redirector_param *param = (struct redirector_param *)conn->ud; | |||
gint r, urllen; | |||
const gchar *hdr; | |||
const GString *hdr; | |||
gchar *urlstr; | |||
if (msg->code == 200) { | |||
hdr = rspamd_http_message_find_header (msg, "Uri"); | |||
if (hdr != NULL) { | |||
msg_info ("<%s> got reply from redirector: '%s' -> '%s'", | |||
msg_info ("<%s> got reply from redirector: '%s' -> '%v'", | |||
param->task->message_id, | |||
struri (param->url), | |||
hdr); | |||
urllen = strlen (hdr); | |||
urlstr = rspamd_mempool_strdup (param->task->task_pool, | |||
hdr); | |||
urllen = hdr->len; | |||
urlstr = rspamd_mempool_alloc (param->task->task_pool, | |||
urllen + 1); | |||
rspamd_strlcpy (urlstr, hdr->str, urllen + 1); | |||
r = rspamd_url_parse (param->url, urlstr, urllen, | |||
param->task->task_pool); | |||