具有多个消息的单个PAM对话

我正在帮助构build一个可插拔的访问模块。 我们的模块最初只实现了一个PAM对话,只有一条消息,并且工作正常。 然后,我们需要在对话中添加第二条消息,并认为将num_msg加1并传递必要的指针足够简单。

但是,使用下面的代码,PAM现在在用户响应第一个提示后返回一个错误。 (该错误是一个pam会话错误,奇怪的是,即使没有列出作为conv函数的响应types。)

将提示分成两个不同的会话对象可以正常工作,但是我希望能够将多个提示添加到同一个对话中。 谷歌search显示,一个对话中可能会有多个消息的不良行为,但我找不到具体的东西。 有关这里发生了什么事情或我错过了什么想法?

pam_message first_message; first_message.msg = const_cast<char *> ("First prompt: "); first.msg_style = PAM_PROMPT_ECHO_OFF; pam_message second_message; second_message.msg = const_cast<char *> ("Second prompt: "); second_message.msg_style = PAM_PROMPT_ECHO_OFF; std::vector<const pam_message *> messages; messages.push_back (&first_message); messages.push_back (&second_message); std::vector<pam_response *> responses (2); int conv_result = conv->conv (2, messages.data(), responses.data(), conv->appdata_ptr);