Files
ABSEC/absec_pam.c
T

66 lines
1.7 KiB
C

#include "absec_pam.h"
#include <security/pam_appl.h>
#include <security/pam_misc.h>
////////////////////////////////////////////////////////////////
/* Check user autentication against unix user/pass */
/*static int check_autentication(request_rec *r)
{
return 0;
}*/
////////////////////////////////////////////////////////////////
/* Check check file perms */
/*static int check_autorization(request_rec *r)
{
return 0;
}*/
// Global var for passing fake response to PAM callback
struct pam_response *reply;
////////////////////////////////////////////////////////////////
// PAM response callback function
int converse(int n, const struct pam_message **msg,
struct pam_response **resp, void *data)
{
// Return globally set response
*resp = reply;
return PAM_SUCCESS;
}
////////////////////////////////////////////////////////////////
// define PAM callback function
struct pam_conv conv = { converse, 0 };
int check_user(char* user, char* pass) {
////////
// Connect to PAM to auth user
pam_handle_t * pamh = NULL;
int rret;
if((rret = pam_start("httpd", user, &conv, &pamh)) != PAM_SUCCESS) {
return PAM_ERROR_START;
}
// Set the PAM callback function response (would call for password)
reply = (struct pam_response *)malloc(sizeof(struct pam_response));
reply[0].resp = strdup(pass); // password received in basic auth
reply[0].resp_retcode = 0;
if((rret = pam_authenticate(pamh, 0)) != PAM_SUCCESS) {
return PAM_ERROR_INVALID_CRED;
}
if(pam_end(pamh, rret) != PAM_SUCCESS) {
}
}
////////////////////////////////////////////////////////////////
/*void main(int argc, char** argv) {
printf("absec_pam OK\n");
exit(0);
}*/