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;
}