Tengo una aplicación heredada que recibe una solicitud de nombre de usuario/contraseña de forma asincrónica a través del cable. Como ya tengo el nombre de usuario y la contraseña almacenados como variables, ¿cuál sería la mejor manera de autenticarse con PAM en Linux (Debian 6)?Autenticación PAM para una aplicación heredada
He intentado escribir mi propia función de conversación, pero no estoy seguro de la mejor manera de introducir la contraseña. He considerado almacenarlo en appdata y hacer referencia a eso desde la estructura pam_conv, pero casi no hay documentación sobre cómo hacerlo.
¿Existe una manera más simple de autenticar usuarios sin la sobrecarga de una función de conversación? Tampoco puedo usar pam_set_data correctamente, y no estoy seguro de que sea apropiado.
Esto es lo que estoy haciendo:
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);
Y iniciales intentos de la función de conversación dio lugar a (la contraseña se modificable para la prueba):
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);
}
Cualquier ayuda sería muy apreciada. ¡Gracias!
Gracias! Y aquí estaba tratando de encontrar formas de comunicarme con la función de conversación en lugar de solo pasar por alto y trabajar con la respuesta fuera de ella. –
Esto no funciona para 'raíz' (solo 'raíz', todos los demás usuarios son autómatas). ¿Es eso un error? – alexandernst
No lo sé. No intenté con root. Probablemente esté haciendo algo mal si necesita usar la contraseña de root regularmente. – Fantius