fix: revert Warden HASH_RESULT fallback — silence is correct behavior

ChromieCraft/AzerothCore tolerates no HASH_RESULT response (continues
session without Warden checks), but immediately kicks on a WRONG hash.
The previous commit sent a fallback SHA1 which the server rejected,
breaking login that was working before.

Restore the skip behavior for WotLK/TBC: stay silent on HASH_REQUEST
when no CR match exists, and advance to WAIT_CHECKS so the rest of the
session proceeds normally. Turtle/Classic servers still get the fallback
hash since they're lenient about wrong values.
This commit is contained in:
Kelsi 2026-03-31 01:18:58 -07:00
parent f3f7511105
commit 5ad225313d

View file

@ -535,15 +535,19 @@ void WardenHandler::handleWardenData(network::Packet& packet) {
bool isTurtle = isActiveExpansion("turtle");
bool isClassic = (owner_.build <= 6005) && !isTurtle;
// Previously we skipped the response for WotLK/TBC to avoid bans on strict
// servers (e.g. Warmane). However, most servers (AzerothCore, ChromieCraft,
// TrinityCore) are permissive and only kick — not ban — for wrong hashes.
// Skipping causes a guaranteed kick-on-timeout, while sending a fallback
// hash at least lets permissive servers continue the session.
// For strict servers, provide a .cr file with the correct seed→reply.
if (!isTurtle && !isClassic) {
// WotLK/TBC: don't respond to HASH_REQUEST without a valid CR match.
// ChromieCraft/AzerothCore tolerates the silence (no ban, no kick),
// but REJECTS a wrong hash and closes the connection immediately.
// Staying silent lets the server continue the session without Warden checks.
LOG_WARNING("Warden: HASH_REQUEST seed=", seedHex,
" — no CR match, skipping response (server tolerates silence)");
wardenState_ = WardenState::WAIT_CHECKS;
break;
}
LOG_WARNING("Warden: No CR match (seed=", seedHex,
"), sending fallback hash");
"), sending fallback hash (lenient server)");
std::vector<uint8_t> fallbackReply;
if (wardenLoadedModule_ && wardenLoadedModule_->isLoaded()) {