Russian, копать сюда
int pam_start(const char *service, const char  *user,  const
     struct pam_conv *pam_conv, pam_handle_t **pamh);
     struct pam_conv {
         int   (*conv)();     /* Conversation function */
         void  *appdata_ptr;  /* Application data */
     };
     int conv(int num_msg, const struct pam_message **msg,
              struct pam_response **resp, void *appdata_ptr);
     The conv() function is called by a service module to hold  a
     PAM  conversation  with  the application or user. For window
     applications, the application can create a new pop-up window
     to be used by the interaction.
То есть ты можешь задать некую функцию через которую pam получит пароль. Функция может брать данные например из окна.