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