pam: start conversation right away (#1003)

* Revert "auth: don't start pam conversation before the initial input happens (#409)"

This reverts commit 3bedae4436.

* pam: fix some logic cleanup
This commit is contained in:
Maximilian Seidler 2026-04-29 17:35:26 +00:00 committed by GitHub
parent d332164dd9
commit 927e09fb7d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -27,18 +27,17 @@ int conv(int num_msg, const struct pam_message** msg, struct pam_response** resp
const auto PROMPTCHANGED = PROMPT != CONVERSATIONSTATE->prompt;
Log::logger->log(Log::INFO, "PAM_PROMPT: {}", PROMPT);
if (PROMPTCHANGED)
g_pHyprlock->enqueueForceUpdateTimers();
// Some pam configurations ask for the password twice for whatever reason (Fedora su for example)
// When the prompt is the same as the last one, I guess our answer can be the same.
if (!initialPrompt && PROMPTCHANGED) {
if (initialPrompt || PROMPTCHANGED) {
CONVERSATIONSTATE->prompt = PROMPT;
g_pHyprlock->enqueueForceUpdateTimers();
CONVERSATIONSTATE->waitForInput();
}
// Needed for unlocks via SIGUSR1
if (g_pHyprlock->isUnlocked())
if (g_pHyprlock->m_bTerminate)
return PAM_CONV_ERR;
pamReply[i].resp = strdup(CONVERSATIONSTATE->input.c_str());
@ -83,18 +82,14 @@ void CPam::init() {
while (true) {
resetConversation();
// Initial input
m_sConversationState.prompt = "Password: ";
waitForInput();
// For grace or SIGUSR1 unlocks
if (g_pHyprlock->isUnlocked())
if (g_pHyprlock->m_bTerminate)
return;
const auto AUTHENTICATED = auth();
// For SIGUSR1 unlocks
if (g_pHyprlock->isUnlocked())
if (g_pHyprlock->m_bTerminate)
return;
if (!AUTHENTICATED)