Listing 3. A Basic Implemenation of pam_sm_setcred PAM_EXTERN int pam_sm_setcred(pam_handle_t * pamh, int flags ,int argc, const char **argv) { unsigned int ctrl; int retval; ctrl = _set_ctrl(pamh, flags, NULL, argc, argv); retval = PAM_SUCCESS; printf("recovering return code from auth call"); pam_get_data(pamh, "unix_setcred_return", (const void **) pretval); if(pretval) { retval = *pretval; free(pretval); printf("recovered data indicates that old retval was %d", retval); } return retval; }