Fix password changing getting stuck if wrong password is entered once

This commit is contained in:
sfan5 2022-04-27 19:32:51 +02:00
parent 3d2bf8fb02
commit 00f71c3b9d
3 changed files with 13 additions and 0 deletions

@ -596,6 +596,15 @@ void RemoteClient::notifyEvent(ClientStateEvent event)
} }
} }
void RemoteClient::resetChosenMech()
{
if (chosen_mech == AUTH_MECHANISM_SRP) {
srp_verifier_delete((SRPVerifier *) auth_data);
auth_data = nullptr;
}
chosen_mech = AUTH_MECHANISM_NONE;
}
u64 RemoteClient::uptime() const u64 RemoteClient::uptime() const
{ {
return porting::getTimeS() - m_connection_time; return porting::getTimeS() - m_connection_time;

@ -243,6 +243,8 @@ public:
u32 allowed_auth_mechs = 0; u32 allowed_auth_mechs = 0;
u32 allowed_sudo_mechs = 0; u32 allowed_sudo_mechs = 0;
void resetChosenMech();
bool isSudoMechAllowed(AuthMechanism mech) bool isSudoMechAllowed(AuthMechanism mech)
{ return allowed_sudo_mechs & mech; } { return allowed_sudo_mechs & mech; }
bool isMechAllowed(AuthMechanism mech) bool isMechAllowed(AuthMechanism mech)

@ -1639,6 +1639,7 @@ void Server::handleCommand_SrpBytesA(NetworkPacket* pkt)
<< std::endl; << std::endl;
if (wantSudo) { if (wantSudo) {
DenySudoAccess(peer_id); DenySudoAccess(peer_id);
client->resetChosenMech();
return; return;
} }
@ -1705,6 +1706,7 @@ void Server::handleCommand_SrpBytesM(NetworkPacket* pkt)
<< " tried to change their password, but supplied wrong" << " tried to change their password, but supplied wrong"
<< " (SRP) password for authentication." << std::endl; << " (SRP) password for authentication." << std::endl;
DenySudoAccess(peer_id); DenySudoAccess(peer_id);
client->resetChosenMech();
return; return;
} }