commit dab651a240ad59722c3c23fcea6e2f91909b2a1b
parent 52fea936930d500edf7a1e257421049111d352f1
Author: Christoph Gysin <christoph.gysin@gmail.com>
Date: Sun, 24 Jan 2016 14:35:28 +0200
swaylock: fix pam conversation
Diffstat:
1 file changed, 15 insertions(+), 5 deletions(-)
diff --git a/swaylock/main.c b/swaylock/main.c
@@ -48,16 +48,26 @@ int function_conversation(int num_msg, const struct pam_message **msg,
"PAM_TEXT_INFO",
};
+ /* PAM expects an array of responses, one for each message */
+ struct pam_response *pam_reply = calloc(num_msg, sizeof(struct pam_response));
+ *resp = pam_reply;
+
for(int i=0; i<num_msg; ++i) {
sway_log(L_DEBUG, "msg[%d]: (%s) %s", i,
msg_style_names[msg[i]->msg_style],
msg[i]->msg);
- }
- struct pam_response *pam_reply = malloc(sizeof(struct pam_response));
- pam_reply[0].resp = password;
- pam_reply[0].resp_retcode = 0;
- *resp = pam_reply;
+ switch (msg[i]->msg_style) {
+ case PAM_PROMPT_ECHO_OFF:
+ case PAM_PROMPT_ECHO_ON:
+ pam_reply[i].resp = password;
+ break;
+
+ case PAM_ERROR_MSG:
+ case PAM_TEXT_INFO:
+ break;
+ }
+ }
return PAM_SUCCESS;
}