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