1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- #include "pam_private.h"
- #include <stdlib.h>
- int pam_end(pam_handle_t *pamh, int pam_status)
- {
- int ret;
- D(("entering pam_end()"));
- IF_NO_PAMH("pam_end", pamh, PAM_SYSTEM_ERR);
- if (__PAM_FROM_MODULE(pamh)) {
- D(("called from module!?"));
- return PAM_SYSTEM_ERR;
- }
- #ifdef HAVE_LIBAUDIT
- _pam_audit_end(pamh, pam_status);
- #endif
-
- _pam_free_data(pamh, pam_status);
-
- if ((ret = _pam_free_handlers(pamh)) != PAM_SUCCESS) {
- return ret;
- }
-
- _pam_drop_env(pamh);
- _pam_overwrite(pamh->authtok);
- _pam_drop(pamh->authtok);
- _pam_overwrite(pamh->oldauthtok);
- _pam_drop(pamh->oldauthtok);
- _pam_overwrite(pamh->former.prompt);
- _pam_drop(pamh->former.prompt);
- _pam_overwrite(pamh->service_name);
- _pam_drop(pamh->service_name);
- _pam_overwrite(pamh->user);
- _pam_drop(pamh->user);
- _pam_overwrite(pamh->confdir);
- _pam_drop(pamh->confdir);
- _pam_overwrite(pamh->prompt);
- _pam_drop(pamh->prompt);
- _pam_overwrite(pamh->tty);
- _pam_drop(pamh->tty);
- _pam_overwrite(pamh->rhost);
- _pam_drop(pamh->rhost);
- _pam_overwrite(pamh->ruser);
- _pam_drop(pamh->ruser);
- _pam_drop(pamh->pam_conversation);
- pamh->fail_delay.delay_fn_ptr = NULL;
- _pam_drop(pamh->former.substates);
- _pam_overwrite(pamh->xdisplay);
- _pam_drop(pamh->xdisplay);
- _pam_overwrite(pamh->xauth.name);
- _pam_drop(pamh->xauth.name);
- _pam_overwrite_n(pamh->xauth.data, (unsigned int)pamh->xauth.datalen);
- _pam_drop(pamh->xauth.data);
- _pam_overwrite_n((char *)&pamh->xauth, sizeof(pamh->xauth));
- _pam_overwrite(pamh->authtok_type);
- _pam_drop(pamh->authtok_type);
-
- _pam_drop(pamh);
- D(("exiting pam_end() successfully"));
- return PAM_SUCCESS;
- }
|