module Rpam::Ext

Public Class Methods

authpam(p1, p2, p3) click to toggle source

Authenticates a user and returns TRUE on success, FALSE on failure

VALUE method_authpam(VALUE self, VALUE username, VALUE password, VALUE servicename) {   
        char* rpam_servicename;
    pam_auth_t userinfo = {NULL, NULL};
        struct pam_conv conv_info = {&auth_pam_talker, (void *) &userinfo};
        pam_handle_t *pamh = NULL;
        int result;

        rpam_servicename = StringValuePtr(servicename);
        userinfo.name =    StringValuePtr(username);
        userinfo.pw =      StringValuePtr(password);
 
        if ((result = pam_start(rpam_servicename, userinfo.name, &conv_info, &pamh)) 
            != PAM_SUCCESS) {
       
        return Qfalse;
    }
    if ((result = pam_authenticate(pamh, PAM_DISALLOW_NULL_AUTHTOK))
           !=  PAM_SUCCESS) {

        pam_end(pamh, PAM_SUCCESS); 
        return Qfalse;
    }

   if ((result = pam_acct_mgmt(pamh, PAM_DISALLOW_NULL_AUTHTOK)) 
           != PAM_SUCCESS) {
       
        pam_end(pamh, PAM_SUCCESS);
        return Qfalse;
   }

    pam_end(pamh, PAM_SUCCESS);
    return Qtrue;
}