utenticação @PAM para um aplicativo herdado

Tenho um aplicativo herdado que recebe uma solicitação de nome de usuário / senha de forma assíncrona por fio. Como eu já tenho o nome de usuário e a senha armazenados como variáveis, qual seria a melhor maneira de autenticar com o PAM no Linux (Debian 6)?

Tentei escrever minha própria função de conversa, mas não tenho certeza da melhor maneira de inserir a senha nela. Eu considerei armazená-lo no appdata e referenciá-lo a partir da estrutura pam_conv, mas quase não há documentação sobre como fazer iss

Existe uma maneira mais simples de autenticar usuários sem o excesso de uma função de conversa? Também não consigo usar o pam_set_data e não tenho certeza se isso é apropriad

Aqui está o que estou fazendo:

user = guiMessage->username;
pass = guiMessage->password;

pam_handle_t* pamh = NULL;
int           pam_ret;
struct pam_conv conv = {
  my_conv,
  NULL
};

pam_start("nxs_login", user, &conv, &pamh);
pam_ret = pam_authenticate(pamh, 0);

if (pam_ret == PAM_SUCCESS)
  permissions = 0xff;

pam_end(pamh, pam_ret);

E as tentativas iniciais da função de conversação resultaram (a senha é codificada para teste):

int 
my_conv(int num_msg, const struct pam_message **msg, struct pam_response **resp, void *data)
{
  struct pam_response *aresp;

  if (num_msg <= 0 || num_msg > PAM_MAX_NUM_MSG)
    return (PAM_CONV_ERR);
  if ((aresp = (pam_response*)calloc(num_msg, sizeof *aresp)) == NULL)
    return (PAM_BUF_ERR);
  aresp[0].resp_retcode = 0;
  aresp[0].resp = strdup("mypassword");

  *resp = aresp;
  return (PAM_SUCCESS);
}

Qualquer ajuda seria apreciada. Obrigado

questionAnswers(3)

yourAnswerToTheQuestion