Browse Source

[Fix] Fix logic of cached passwords check

Issue: #913
tags/1.6.0
Vsevolod Stakhov 7 years ago
parent
commit
63f496b42a
1 changed files with 25 additions and 4 deletions
  1. 25
    4
      src/controller.c

+ 25
- 4
src/controller.c View File

@@ -291,13 +291,34 @@ rspamd_check_encrypted_password (struct rspamd_controller_worker_ctx *ctx,
if (password->len != ctx->cached_password.len ||
!rspamd_constant_memcmp (password->begin,
ctx->cached_password.begin, password->len)) {
msg_info_ctx ("incorrect or absent password has been specified");
return FALSE;
/* We still need to check enable password here */
if (ctx->cached_enable_password.len != 0) {
if (password->len != ctx->cached_enable_password.len ||
!rspamd_constant_memcmp (password->begin,
ctx->cached_enable_password.begin,
password->len)) {
msg_info_ctx (
"incorrect or absent password has been specified");

return FALSE;
}
else {
/* Cached matched */
return TRUE;
}
}
else {
/* We might want to check uncached version */
goto check_uncached;
}
}
else {
/* Cached matched */
return TRUE;
}

return TRUE;
}

check_uncached:
g_assert (pbkdf != NULL);
/* get salt */
salt = rspamd_encrypted_password_get_str (check, 3, &salt_len);

Loading…
Cancel
Save