Я пишу собственный менеджер дисплеев, и во время тестирования я обнаружил, что pam_authenticate всегда возвращает PAM_AUTH_ERR.
Я испробовал мое имя пользователя / пароль, неверный пароль, пустое поле пароля и нераспознанное имя пользователя. Все эти попытки вернули PAM_AUTH_ERR. Я очень новичок в PAM, поэтому я попробовал другие (грубой силы) методы, такие как установка возврата в SUCCESS и возвращение True моей функции входа в систему (где находится вызов pam_authenticate).
Здесь находится аутентификация (err () - это определенный макрос для вывода ошибки и «return False;» в «login (...)».
bool login(const char *username, const char *password, pid_t *child_pid) {
const char *data[2] = {username, password};
struct pam_conv pam_conv = {
conv, data
};
int result = pam_start(SERVICE_NAME, username, &pam_conv, &pam_handle);
if (result != PAM_SUCCESS) {
err("pam_start");
}
result = pam_authenticate(pam_handle, 0);
//result = PAM_SUCCESS;
if (result != PAM_SUCCESS) {
err("pam_authenticate");
//err("pam_authenticate");
}
...
}
Вот изображение происходящего: https://i.imgur.com/3291JtW.png.
Я должен иметь возможность войти в учетную запись пользователя и продолжить работу в обычном режиме. Я не ожидаю, что мой пользовательский менеджер дисплеев будет работать со сложным диспетчером окон, поэтому я использую сеанс с DWM.
Спасибо за любую помощь.