Я помогаю создать подключаемый модуль доступа. Наш модуль изначально реализовал PAM-диалог только с одним сообщением, и он работал нормально. Затем нам нужно было добавить второе сообщение к беседе, и мы подумали, что будет достаточно просто увеличить num_msg на единицу и передать необходимые указатели.
Однако с помощью приведенного ниже кода PAM теперь возвращает ошибку после того, как пользователь ответит на первое приглашение. (Ошибка, как ни странно, ошибка сеанса pam, хотя она не указана в качестве типа ответа для функции conv.)
Разделение приглашений на два разных объекта разговора работает нормально, но я хотел бы иметь возможность добавить несколько приглашений в один разговор. Поиск в Google показывает, что с несколькими сообщениями в одном разговоре можно ожидать плохого поведения, хотя я не смог найти ничего конкретного. Есть мысли о том, что здесь происходит или чего мне не хватает?
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);
Задача ещё не решена.
Других решений пока нет …