mirror of
https://github.com/MarekZegare4/MeshCore-Solo.git
synced 2026-08-01 09:46:22 +00:00
fix(ui): Admin password change didn't update the saved login copy
Tools > Admin > System > "Admin password" (set-only, sends "password <new>") changes the remote node's own admin credential, but nothing updated this device's saved copy of it -- so the very next login attempt to that node retried the password just replaced, landing straight in the "stuck on Logging in..." case fixed in the previous commit. Likely the actual trigger behind that report. CommonCLI::handleCommand() always echoes a successful password change back as "password now: <value>" (truncation and all), so parsing that reply gives the exact value now required to log back in, rather than trusting what we sent (which the remote may have truncated further). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -410,6 +410,23 @@ public:
|
||||
openValueKb(trimmed); // _pending_set_prefix is already set from activateField()
|
||||
return;
|
||||
}
|
||||
// The "Admin password" row (SYSTEM_FIELDS, set-only) just changed the
|
||||
// remote's own admin credential -- CommonCLI::handleCommand() always
|
||||
// echoes it back as "password now: <value>" (see src/helpers/CommonCLI.cpp),
|
||||
// truncation and all, so parsing that confirms the exact value now
|
||||
// required to log back in. Without this, our saved password goes stale
|
||||
// the instant this command succeeds, guaranteeing the next login attempt
|
||||
// fails (see the LOGIN-phase timeout fix above for what that used to look
|
||||
// like: a permanent "Logging in..." hang with a stale saved password).
|
||||
static const char PW_ECHO_PREFIX[] = "password now: ";
|
||||
if (!strncmp(text, PW_ECHO_PREFIX, sizeof(PW_ECHO_PREFIX) - 1)) {
|
||||
char newpw[32];
|
||||
strncpy(newpw, text + sizeof(PW_ECHO_PREFIX) - 1, sizeof(newpw) - 1);
|
||||
newpw[sizeof(newpw) - 1] = '\0';
|
||||
size_t n = strlen(newpw);
|
||||
while (n > 0 && (newpw[n-1] == '\n' || newpw[n-1] == '\r' || newpw[n-1] == ' ')) newpw[--n] = '\0';
|
||||
the_mesh.saveRoomPassword(_target.id.pub_key, newpw);
|
||||
}
|
||||
strncpy(_reply_text, text, sizeof(_reply_text) - 1);
|
||||
_reply_text[sizeof(_reply_text) - 1] = '\0';
|
||||
_reply_view.begin();
|
||||
|
||||
Reference in New Issue
Block a user